Repository files navigation

CAIN: Concordia Artificial Immune Network for B-cell Selection


Disclosure

This repo is a work in progress and results from this algorithm were not validated on ground-truth data.

Purpose

CAIN simulates B-cell selection and an immune response following the introduction of a foreign pathogenic antigen. This algorithm is only applicable to antigens with linear epitope binding sites. B-cell selection occurs via amino acid substitution likelihoods according to the Point Accepted Mutation (PAM) matrix. The PAM1 and PAM250 matrices text file are provided. If you wish to use different versions, please place the files in the Resources directory and alter the code chunk in the Bcell_Selection.py file.

Following B-cell selection, an immune response is performed using game-theory concepts to run a 1x1 matrix game between each individual of the lymphocyte and antigen populations. The "loser" of each game loses an individual from their respective population and visa versa for the "winner".


Dependencies

Please install these module versions prior to using CAIN.

  • Python 3.0+
  • Numpy 1.21.4
  • Pandas 1.3.4
  • tqdm 4.62.3

Installation

To clone the repository, open the command terminal and set your working directory.

Next, run the following command:

$ git clone https://github.com/phicks22/CAIN

Selection and Response

First: Set your root directory in the Arg_Parser.py file at the very top. Next, run the following command in the terminal, setting each argument per the desired parameters.

$ python Main.py -e <amino_acid_sequence> -n 100 -d 2 -p 4 -ex 1000 -r 10

Required arguments:

  • -e: Antigen linear epitope. Example: ARIKDDCGHAI
  • -n: Number of individuals in each B-cell population
  • -d: Antigen division rate
  • -p: Number of B-cell populations
  • -ex: Number of exchange iterations that occur during B-cell selection
  • -r: Number of immune response iterations

Running Main.py initiates the B-cell selection algorithm and immune response simultaneously.


Unsupervised Parameter Clustering

  1. To collect your data, uncomment the block section For Large Data Collection and set the disired ranges of your hyper-parameters. Run the model which will output an .npz file with kwds="data".
  2. Load the data into Parameter_Clustering.py and choose the desired clustering method.

About

An artificial immune network to simulate B-cell clonal selection and perform an agent-based game immune response.

Topics

Resources

Stars

2 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

CAIN: Concordia Artificial Immune Network for B-cell Selection


Disclosure

This repo is a work in progress and results from this algorithm were not validated on ground-truth data.

Purpose

CAIN simulates B-cell selection and an immune response following the introduction of a foreign pathogenic antigen. This algorithm is only applicable to antigens with linear epitope binding sites. B-cell selection occurs via amino acid substitution likelihoods according to the Point Accepted Mutation (PAM) matrix. The PAM1 and PAM250 matrices text file are provided. If you wish to use different versions, please place the files in the Resources directory and alter the code chunk in the Bcell_Selection.py file.

Following B-cell selection, an immune response is performed using game-theory concepts to run a 1x1 matrix game between each individual of the lymphocyte and antigen populations. The "loser" of each game loses an individual from their respective population and visa versa for the "winner".


Dependencies

Please install these module versions prior to using CAIN.

  • Python 3.0+
  • Numpy 1.21.4
  • Pandas 1.3.4
  • tqdm 4.62.3

Installation

To clone the repository, open the command terminal and set your working directory.

Next, run the following command:

$ git clone https://github.com/phicks22/CAIN

Selection and Response

First: Set your root directory in the Arg_Parser.py file at the very top. Next, run the following command in the terminal, setting each argument per the desired parameters.

$ python Main.py -e <amino_acid_sequence> -n 100 -d 2 -p 4 -ex 1000 -r 10

Required arguments:

  • -e: Antigen linear epitope. Example: ARIKDDCGHAI
  • -n: Number of individuals in each B-cell population
  • -d: Antigen division rate
  • -p: Number of B-cell populations
  • -ex: Number of exchange iterations that occur during B-cell selection
  • -r: Number of immune response iterations

Running Main.py initiates the B-cell selection algorithm and immune response simultaneously.


Unsupervised Parameter Clustering

  1. To collect your data, uncomment the block section For Large Data Collection and set the disired ranges of your hyper-parameters. Run the model which will output an .npz file with kwds="data".
  2. Load the data into Parameter_Clustering.py and choose the desired clustering method.

About

An artificial immune network to simulate B-cell clonal selection and perform an agent-based game immune response.

Topics

Resources

Stars

2 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

CAIN: Concordia Artificial Immune Network for B-cell Selection


Disclosure

This repo is a work in progress and results from this algorithm were not validated on ground-truth data.

Purpose

CAIN simulates B-cell selection and an immune response following the introduction of a foreign pathogenic antigen. This algorithm is only applicable to antigens with linear epitope binding sites. B-cell selection occurs via amino acid substitution likelihoods according to the Point Accepted Mutation (PAM) matrix. The PAM1 and PAM250 matrices text file are provided. If you wish to use different versions, please place the files in the Resources directory and alter the code chunk in the Bcell_Selection.py file.

Following B-cell selection, an immune response is performed using game-theory concepts to run a 1x1 matrix game between each individual of the lymphocyte and antigen populations. The "loser" of each game loses an individual from their respective population and visa versa for the "winner".


Dependencies

Please install these module versions prior to using CAIN.

  • Python 3.0+
  • Numpy 1.21.4
  • Pandas 1.3.4
  • tqdm 4.62.3

Installation

To clone the repository, open the command terminal and set your working directory.

Next, run the following command:

$ git clone https://github.com/phicks22/CAIN

Selection and Response

First: Set your root directory in the Arg_Parser.py file at the very top. Next, run the following command in the terminal, setting each argument per the desired parameters.

$ python Main.py -e <amino_acid_sequence> -n 100 -d 2 -p 4 -ex 1000 -r 10

Required arguments:

  • -e: Antigen linear epitope. Example: ARIKDDCGHAI
  • -n: Number of individuals in each B-cell population
  • -d: Antigen division rate
  • -p: Number of B-cell populations
  • -ex: Number of exchange iterations that occur during B-cell selection
  • -r: Number of immune response iterations

Running Main.py initiates the B-cell selection algorithm and immune response simultaneously.


Unsupervised Parameter Clustering

  1. To collect your data, uncomment the block section For Large Data Collection and set the disired ranges of your hyper-parameters. Run the model which will output an .npz file with kwds="data".
  2. Load the data into Parameter_Clustering.py and choose the desired clustering method.

About

An artificial immune network to simulate B-cell clonal selection and perform an agent-based game immune response.

Topics

Resources

Stars

2 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

CAIN: Concordia Artificial Immune Network for B-cell Selection


Disclosure

This repo is a work in progress and results from this algorithm were not validated on ground-truth data.

Purpose

CAIN simulates B-cell selection and an immune response following the introduction of a foreign pathogenic antigen. This algorithm is only applicable to antigens with linear epitope binding sites. B-cell selection occurs via amino acid substitution likelihoods according to the Point Accepted Mutation (PAM) matrix. The PAM1 and PAM250 matrices text file are provided. If you wish to use different versions, please place the files in the Resources directory and alter the code chunk in the Bcell_Selection.py file.

Following B-cell selection, an immune response is performed using game-theory concepts to run a 1x1 matrix game between each individual of the lymphocyte and antigen populations. The "loser" of each game loses an individual from their respective population and visa versa for the "winner".


Dependencies

Please install these module versions prior to using CAIN.

  • Python 3.0+
  • Numpy 1.21.4
  • Pandas 1.3.4
  • tqdm 4.62.3

Installation

To clone the repository, open the command terminal and set your working directory.

Next, run the following command:

$ git clone https://github.com/phicks22/CAIN

Selection and Response

First: Set your root directory in the Arg_Parser.py file at the very top. Next, run the following command in the terminal, setting each argument per the desired parameters.

$ python Main.py -e <amino_acid_sequence> -n 100 -d 2 -p 4 -ex 1000 -r 10

Required arguments:

  • -e: Antigen linear epitope. Example: ARIKDDCGHAI
  • -n: Number of individuals in each B-cell population
  • -d: Antigen division rate
  • -p: Number of B-cell populations
  • -ex: Number of exchange iterations that occur during B-cell selection
  • -r: Number of immune response iterations

Running Main.py initiates the B-cell selection algorithm and immune response simultaneously.


Unsupervised Parameter Clustering

  1. To collect your data, uncomment the block section For Large Data Collection and set the disired ranges of your hyper-parameters. Run the model which will output an .npz file with kwds="data".
  2. Load the data into Parameter_Clustering.py and choose the desired clustering method.

About

An artificial immune network to simulate B-cell clonal selection and perform an agent-based game immune response.

Topics

Resources

Stars

2 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

CAIN: Concordia Artificial Immune Network for B-cell Selection


Disclosure

This repo is a work in progress and results from this algorithm were not validated on ground-truth data.

Purpose

CAIN simulates B-cell selection and an immune response following the introduction of a foreign pathogenic antigen. This algorithm is only applicable to antigens with linear epitope binding sites. B-cell selection occurs via amino acid substitution likelihoods according to the Point Accepted Mutation (PAM) matrix. The PAM1 and PAM250 matrices text file are provided. If you wish to use different versions, please place the files in the Resources directory and alter the code chunk in the Bcell_Selection.py file.

Following B-cell selection, an immune response is performed using game-theory concepts to run a 1x1 matrix game between each individual of the lymphocyte and antigen populations. The "loser" of each game loses an individual from their respective population and visa versa for the "winner".


Dependencies

Please install these module versions prior to using CAIN.

  • Python 3.0+
  • Numpy 1.21.4
  • Pandas 1.3.4
  • tqdm 4.62.3

Installation

To clone the repository, open the command terminal and set your working directory.

Next, run the following command:

$ git clone https://github.com/phicks22/CAIN

Selection and Response

First: Set your root directory in the Arg_Parser.py file at the very top. Next, run the following command in the terminal, setting each argument per the desired parameters.

$ python Main.py -e <amino_acid_sequence> -n 100 -d 2 -p 4 -ex 1000 -r 10

Required arguments:

  • -e: Antigen linear epitope. Example: ARIKDDCGHAI
  • -n: Number of individuals in each B-cell population
  • -d: Antigen division rate
  • -p: Number of B-cell populations
  • -ex: Number of exchange iterations that occur during B-cell selection
  • -r: Number of immune response iterations

Running Main.py initiates the B-cell selection algorithm and immune response simultaneously.


Unsupervised Parameter Clustering

  1. To collect your data, uncomment the block section For Large Data Collection and set the disired ranges of your hyper-parameters. Run the model which will output an .npz file with kwds="data".
  2. Load the data into Parameter_Clustering.py and choose the desired clustering method.

About

An artificial immune network to simulate B-cell clonal selection and perform an agent-based game immune response.

Topics

Resources

Stars

2 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

CAIN: Concordia Artificial Immune Network for B-cell Selection


Disclosure

This repo is a work in progress and results from this algorithm were not validated on ground-truth data.

Purpose

CAIN simulates B-cell selection and an immune response following the introduction of a foreign pathogenic antigen. This algorithm is only applicable to antigens with linear epitope binding sites. B-cell selection occurs via amino acid substitution likelihoods according to the Point Accepted Mutation (PAM) matrix. The PAM1 and PAM250 matrices text file are provided. If you wish to use different versions, please place the files in the Resources directory and alter the code chunk in the Bcell_Selection.py file.

Following B-cell selection, an immune response is performed using game-theory concepts to run a 1x1 matrix game between each individual of the lymphocyte and antigen populations. The "loser" of each game loses an individual from their respective population and visa versa for the "winner".


Dependencies

Please install these module versions prior to using CAIN.

  • Python 3.0+
  • Numpy 1.21.4
  • Pandas 1.3.4
  • tqdm 4.62.3

Installation

To clone the repository, open the command terminal and set your working directory.

Next, run the following command:

$ git clone https://github.com/phicks22/CAIN

Selection and Response

First: Set your root directory in the Arg_Parser.py file at the very top. Next, run the following command in the terminal, setting each argument per the desired parameters.

$ python Main.py -e <amino_acid_sequence> -n 100 -d 2 -p 4 -ex 1000 -r 10

Required arguments:

  • -e: Antigen linear epitope. Example: ARIKDDCGHAI
  • -n: Number of individuals in each B-cell population
  • -d: Antigen division rate
  • -p: Number of B-cell populations
  • -ex: Number of exchange iterations that occur during B-cell selection
  • -r: Number of immune response iterations

Running Main.py initiates the B-cell selection algorithm and immune response simultaneously.


Unsupervised Parameter Clustering

  1. To collect your data, uncomment the block section For Large Data Collection and set the disired ranges of your hyper-parameters. Run the model which will output an .npz file with kwds="data".
  2. Load the data into Parameter_Clustering.py and choose the desired clustering method.

About

An artificial immune network to simulate B-cell clonal selection and perform an agent-based game immune response.

Topics

Resources

Stars

2 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

CAIN: Concordia Artificial Immune Network for B-cell Selection


Disclosure

This repo is a work in progress and results from this algorithm were not validated on ground-truth data.

Purpose

CAIN simulates B-cell selection and an immune response following the introduction of a foreign pathogenic antigen. This algorithm is only applicable to antigens with linear epitope binding sites. B-cell selection occurs via amino acid substitution likelihoods according to the Point Accepted Mutation (PAM) matrix. The PAM1 and PAM250 matrices text file are provided. If you wish to use different versions, please place the files in the Resources directory and alter the code chunk in the Bcell_Selection.py file.

Following B-cell selection, an immune response is performed using game-theory concepts to run a 1x1 matrix game between each individual of the lymphocyte and antigen populations. The "loser" of each game loses an individual from their respective population and visa versa for the "winner".


Dependencies

Please install these module versions prior to using CAIN.

  • Python 3.0+
  • Numpy 1.21.4
  • Pandas 1.3.4
  • tqdm 4.62.3

Installation

To clone the repository, open the command terminal and set your working directory.

Next, run the following command:

$ git clone https://github.com/phicks22/CAIN

Selection and Response

First: Set your root directory in the Arg_Parser.py file at the very top. Next, run the following command in the terminal, setting each argument per the desired parameters.

$ python Main.py -e <amino_acid_sequence> -n 100 -d 2 -p 4 -ex 1000 -r 10

Required arguments:

  • -e: Antigen linear epitope. Example: ARIKDDCGHAI
  • -n: Number of individuals in each B-cell population
  • -d: Antigen division rate
  • -p: Number of B-cell populations
  • -ex: Number of exchange iterations that occur during B-cell selection
  • -r: Number of immune response iterations

Running Main.py initiates the B-cell selection algorithm and immune response simultaneously.


Unsupervised Parameter Clustering

  1. To collect your data, uncomment the block section For Large Data Collection and set the disired ranges of your hyper-parameters. Run the model which will output an .npz file with kwds="data".
  2. Load the data into Parameter_Clustering.py and choose the desired clustering method.

About

An artificial immune network to simulate B-cell clonal selection and perform an agent-based game immune response.

Topics

Resources

Stars

2 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

CAIN: Concordia Artificial Immune Network for B-cell Selection


Disclosure

This repo is a work in progress and results from this algorithm were not validated on ground-truth data.

Purpose

CAIN simulates B-cell selection and an immune response following the introduction of a foreign pathogenic antigen. This algorithm is only applicable to antigens with linear epitope binding sites. B-cell selection occurs via amino acid substitution likelihoods according to the Point Accepted Mutation (PAM) matrix. The PAM1 and PAM250 matrices text file are provided. If you wish to use different versions, please place the files in the Resources directory and alter the code chunk in the Bcell_Selection.py file.

Following B-cell selection, an immune response is performed using game-theory concepts to run a 1x1 matrix game between each individual of the lymphocyte and antigen populations. The "loser" of each game loses an individual from their respective population and visa versa for the "winner".


Dependencies

Please install these module versions prior to using CAIN.

  • Python 3.0+
  • Numpy 1.21.4
  • Pandas 1.3.4
  • tqdm 4.62.3

Installation

To clone the repository, open the command terminal and set your working directory.

Next, run the following command:

$ git clone https://github.com/phicks22/CAIN

Selection and Response

First: Set your root directory in the Arg_Parser.py file at the very top. Next, run the following command in the terminal, setting each argument per the desired parameters.

$ python Main.py -e <amino_acid_sequence> -n 100 -d 2 -p 4 -ex 1000 -r 10

Required arguments:

  • -e: Antigen linear epitope. Example: ARIKDDCGHAI
  • -n: Number of individuals in each B-cell population
  • -d: Antigen division rate
  • -p: Number of B-cell populations
  • -ex: Number of exchange iterations that occur during B-cell selection
  • -r: Number of immune response iterations

Running Main.py initiates the B-cell selection algorithm and immune response simultaneously.


Unsupervised Parameter Clustering

  1. To collect your data, uncomment the block section For Large Data Collection and set the disired ranges of your hyper-parameters. Run the model which will output an .npz file with kwds="data".
  2. Load the data into Parameter_Clustering.py and choose the desired clustering method.

About

An artificial immune network to simulate B-cell clonal selection and perform an agent-based game immune response.

Topics

Resources

Stars

2 stars

Watchers

2 watching

Forks

Releases

Packages

Contributors

Languages