') + ')', 'gi');
if (regex.test(text)) {
found = true;
var frag = document.createDocumentFragment();
var parts = text.split(regex);
parts.forEach(function(part, i) {
if (i % 2 === 0) {
frag.appendChild(document.createTextNode(part));
} else {
var span = document.createElement('span');
span.className = 'userscript-highlight';
span.textContent = part;
frag.appendChild(span);
}
});
node.parentNode.replaceChild(frag, node);
}
});
} else if (node.nodeType === 1 && node.childNodes) { // element
var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];
if (!skipTags.includes(node.tagName)) {
Array.from(node.childNodes).forEach(highlight);
}
}
}
highlight(document.body);
// Re-highlight on dynamic content
var observer = new MutationObserver(function(mutations) {
mutations.forEach(function(m) {
m.addedNodes.forEach(function(node) {
if (node.nodeType === 1 || node.nodeType === 3) highlight(node);
});
});
});
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); }
})();
(function(){
try {
var __m = "*";
var __re = new RegExp('^' + ".*" + ', 'i');
if (__m === '*' || __re.test(location.href)) {
// Strip utm_, fbclid, gclid, etc. from all links on page
(function() {
var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',
'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',
'ref', 'ref_src', 'source', 'medium', 'campaign'];
function cleanUrl(url) {
try {
var u = new URL(url, window.location.origin);
var changed = false;
trackingParams.forEach(function(p) {
if (u.searchParams.has(p)) {
u.searchParams.delete(p);
changed = true;
}
});
return changed ? u.toString() : url;
} catch (e) {
return url;
}
}
function cleanLinks() {
document.querySelectorAll('a[href]').forEach(function(a) {
var clean = cleanUrl(a.href);
if (clean !== a.href) a.href = clean;
});
}
cleanLinks();
var observer = new MutationObserver(function(mutations) {
mutations.forEach(function(m) {
m.addedNodes.forEach(function(node) {
if (node.nodeType === 1) {
if (node.tagName === 'A') cleanLinks();
node.querySelectorAll('a[href]').forEach(function(a) {
var clean = cleanUrl(a.href);
if (clean !== a.href) a.href = clean;
});
}
});
});
});
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); }
})();
(function(){
try {
var __m = "youtube.com";
var __re = new RegExp('^' + "youtube\\.com" + ', 'i');
if (__m === '*' || __re.test(location.href)) {
// Auto-enable theater mode on YouTube
(function() {
function tryTheater() {
var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]');
if (btn && !btn.classList.contains('activated')) {
btn.click();
}
}
// Try immediately
tryTheater();
// Try after navigation (SPA)
var lastUrl = location.href;
setInterval(function() {
if (location.href !== lastUrl) {
lastUrl = location.href;
setTimeout(tryTheater, 500);
}
}, 1000);
// Also try on player load
var observer = new MutationObserver(tryTheater);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); }
})();
(function(){
try {
var __m = "*";
var __re = new RegExp('^' + ".*" + ', 'i');
if (__m === '*' || __re.test(location.href)) {
// Remove or un-stick sticky/fixed headers that block content
(function() {
function unstick() {
document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) {
if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {
el.style.position = 'static';
el.style.top = 'auto';
el.style.zIndex = 'auto';
}
});
}
unstick();
var observer = new MutationObserver(unstick);
observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });
})();
}
} catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); }
})();
})();
GitHub - RuleWorld/SIAMLS26: Materials and setup instructions for the SIAM LS26 minitutorial on rule-based modeling with BioNetGen and NFsim. · GitHub
Repository files navigation Structure-based Modeling of Biochemical Reaction Networks using BioNetGen A minitutorial at SIAM Life Sciences 2026
This page has everything you need before, during, and after the tutorial: a schedule, software setup instructions, and links to all example models we'll walk through.
Note: This is not a hands-on coding session — you don't need to install anything to follow along. But if you'd like to try the examples yourself afterward (or follow along live), see Getting Started below.
Topic Presenter Introduction to rule-based modeling, BioNetGen VSCode extension, SBML James Faeder Demonstration in VSCode, Interfacing with MATLAB Laura Strube (LFStrube@gmail.com ) PyBioNetGen, Stochastic Simulation, Sensitivity Analysis, Parameter Estimation James Faeder Network-based vs. network-free simulation, NFsim Alex DiBiasi Model integration and simulation pipelines with BNGPlayground (INDRA, EGFR case study) Achyudhan Kutuva Applications: WESTPA/WEBNG, RuleHub, and the broader ecosystem Various
Rule-based modeling concepts — why some biochemical systems (like multivalent ligand-receptor binding) can't be described with a fixed set of ODEsBioNetGen — building rule-based models with .bngl files, generating reaction networks, and simulating with ODE/SSA solversPython ecosystem — PyBioNetGen, Jupyter-based workflows, sensitivity analysis, parameter estimation, identifiabilityNFsim — simulating systems whose reaction networks are too large (or infinite) to enumerate, using network-free simulationApplications — weighted ensemble simulation (WESTPA/WEBNG), model integration with INDRA, and the broader RuleHub model repositoryTo follow along with the example models (optional, not required for the talk itself), consider one of avenues for accessing BioNetGen:
BNGPlayground Simply click this link
Install BioNetGen. Follow the instructions from the BioNetGen website or install the BioNetGen VSCode extension for an integrated editing/simulation experience.
Install PyBioNetGen for Python-based workflows:
All example .bngl files discussed in the tutorial are in the models/ folder of this repo:
Example_SimpleSTAT.bngl— Simple model of IL10-induced STAT phosphorylationLR.bngl — basic L + R ⇌ LR ligand-receptor modelTLBR.bngl — trivalent ligand / bivalent receptor model (NFsim)LAT.bngl — LAT-Grb2-SOS1 aggregation model (NFsim)translation.bngl — ribosome translation model (NFsim)We'll have time for Q&A throughout the session — feel free to interrupt with questions. After the tutorial, you can reach us at [bionetgen.main@gmail.com ] or open an issue on this repo.
Faeder Lab, University of Pittsburgh
You can’t perform that action at this time.