tooluniverse-dose-response
This tool fits 4-parameter logistic (Hill sigmoidal) curves to paired concentration and response measurements from biochemical assays, returning potency values (IC50/EC50), Hill slope, efficacy parameters, and curve quality metrics. Use it when analyzing enzyme inhibition assays, cell-based screening, or receptor pharmacology to quantify drug potency, compare compound potencies, or validate dose-response curve quality.
git clone --depth 1 https://github.com/mims-harvard/ToolUniverse /tmp/tooluniverse-dose-response && cp -r /tmp/tooluniverse-dose-response/plugin/skills/tooluniverse-dose-response ~/.claude/skills/tooluniverse-dose-responseSKILL.md
# Dose-Response / Concentration-Response Analysis
Turn paired **concentration vs response** measurements into a potency (IC50/EC50), a Hill slope, an efficacy (Emax), and a quality judgment — and compare potency between compounds.
## When to use this
- Enzyme inhibition / activation assays, cell viability, reporter assays, radioligand binding, agonist/antagonist pharmacology.
- You have a list of concentrations and the response at each, and want IC50/EC50 + Hill slope.
- You want to say "compound A is N-fold more potent than B."
The model is the 4-parameter logistic (4PL) / Hill sigmoidal:
`f(x) = Emin + (Emax − Emin) / (1 + (EC50/x)^n)` — where `n` is the Hill slope.
## Step 1 — Prepare the data (where results go wrong)
| Issue | What to do |
|---|---|
| **Concentration units** | Pick ONE unit (µM, nM, M) and use it for every point. The IC50 comes back in that unit. Don't mix. |
| **Log vs linear concentrations** | Pass concentrations on the **linear** scale (e.g. `0.01, 0.1, 1, 10`), not log10. The fitter logs internally. |
| **Zero/control concentration** | Drop a literal `0` concentration (log(0) is undefined). Keep it only as the Emin/Emax reference if normalizing. |
| **Direction** | Inhibition curves go high→low (IC50); activation curves go low→high (EC50). The tools handle both; just be consistent. |
| **Normalization** | Convert raw signal to % of control if you want Emax/Emin near 100/0: `% = 100 × (raw − blank)/(control − blank)`. Raw values also fit, but plateaus are then in raw units. |
| **Replicates** | Average technical replicates per concentration before fitting, or pass all points (the fit weights them equally). |
**Coverage requirement:** you need **≥4 points** (the tools require it) and ideally **6–8 spanning both plateaus** — points clearly above and clearly below the inflection. A curve that never plateaus gives an unreliable, extrapolated IC50 (see Step 4).
## Step 2 — Fit / get the potency
Single curve → IC50 or EC50 (same math; "IC50" for inhibition, "EC50" for activation):
```bash
tu run DoseResponse_calculate_ic50 '{"operation":"calculate_ic50",
"concentrations":[0.001,0.01,0.1,1,10,100],
"responses":[98,95,80,45,12,3]}'
```
Returns `ic50`, `ic50_95_confidence_interval`, `hill_slope`, `emax`, `emin`, `r_squared`, `log_ic50`.
Full 4PL parameters only → `DoseResponse_fit_curve` (same inputs). Two compounds → `DoseResponse_compare_potency` with `conc_a/resp_a/conc_b/resp_b` (returns each IC50 + `ic50_fold_shift_b_over_a` + `more_potent`).
For non-standard needs (constrained plateaus, weighting, plotting), `scripts/fit_dose_response.py` runs a scipy 4PL fit from a CSV and matches the tool.
## Step 3 — Interpret the four parameters
| Parameter | Meaning | Sanity check |
|---|---|---|
| **IC50 / EC50** | Concentration giving half-maximal effect — the potency. Lower = more potent. | Should fall *within* your tested range; if it's at/beyond an endpoint, the curve is incomplete (Step 4). |
| **Hill slope `n`** | Steepness / apparent cooperativity. ~1 = simple one-site. >1.5 = steep/positive cooperativity (or non-specific). <0.5 = shallow/multiple sites or heterogeneity. | A wildly large `|n|` (>4) usually means a bad fit or too few transition points, not real cooperativity. |
| **Emax** | Maximal response (top plateau) = efficacy. | For % data, full agonist ≈100; a **partial agonist** plateaus well below 100 even at saturating dose. |
| **Emin** | Bottom plateau (baseline/floor). | For % inhibition data, ≈0 for a complete inhibitor. |
| **r²** | Fit quality. | ≥0.95 good; <0.90 → inspect for outliers, wrong model, or incomplete curve before trusting the IC50. |
**Potency comparison:** report the **fold-shift** in IC50/EC50 (e.g. "A is 6.2× more potent than B"), and only call it meaningful if both fits are good (r²≥0.95) and the Hill slopes are comparable — a potency ratio between curves of very different slope is not a clean comparison.
## Step 4 — Quality gotchas (state these, don't hide them)
- **Incomplete curve / no plateau.** If responses don't flatten at both ends, Emax/Emin (and thus IC50) are extrapolated and unstable. Report the IC50 as "approximate / right-shifted of the tested range" and recommend wider concentrations.
- **<4–5 points or none near the inflection.** The fit can converge to a nonsense IC50 with a high r². Check that points actually bracket the IC50.
- **Biphasic / U-shaped data.** A single 4PL is wrong for hormesis or two-site behavior — the fit will look poor (low r²); flag it rather than forcing one IC50.
- **IC50 vs Ki.** IC50 depends on assay conditions (substrate/ligand concentration). Don't report IC50 as an affinity (Ki) without a Cheng-Prusoff correction.
- **Units.** The IC50 is only as correct as the concentration unit you fed in — always state the unit.
## Honest limitations
- 4PL assumes a monotonic sigmoid; it cannot describe biphasic, bell-shaped, or steep all-or-none responses.
- A confident IC50 from a poor or incomplete curve is the most common error — let r² and curve coverage gate how you report it.
- Potency (IC50/EC50) is not efficacy (Emax) — a more potent compound can be a weaker (partial) agonist; report both.
## Related skills
- `tooluniverse-image-analysis` — dose-response on image-derived measurements (.tif, colony, fluorescence).
- `tooluniverse-gpcr-structural-pharmacology` / `tooluniverse-network-pharmacology` — receptor pharmacology context.
- `tooluniverse-statistical-modeling` — general regression, EC50 via spline, power analysis.Install and configure ToolUniverse for any use case — MCP server (chat-based), CLI (command line with 9 subcommands), or Python SDK (Coding API with 3 calling patterns). Covers uv/uvx setup, MCP configuration for 12+ AI clients (Cursor, Claude Desktop, Windsurf, VS Code, Codex, Gemini CLI, Trae, Cline, etc.), full CLI reference (tu list/grep/find/info/run/test/status/build/serve), Coding API quickstart, agentic tools, code executor, API key walkthrough, skill installation, and upgrading. Use when user asks how to set up ToolUniverse, which access mode to use (MCP vs CLI vs SDK), configuring MCP servers, using the CLI, troubleshooting installation, upgrading, or mentions installing ToolUniverse or setting up scientific tools. Also triggers for "how do I use ToolUniverse", "what's the best way to access tools", "command line", "tu command", "coding API", "tu build".
Systematic ACMG/AMP germline variant classification with all 28 criteria (PVS1, PS1-4, PM1-6, PP1-5, BA1, BS1-4, BP1-7) for clinical significance. Produces 5-tier verdict (Pathogenic / Likely Pathogenic / VUS / Likely Benign / Benign) with cited evidence per criterion. Use for variant interpretation, VUS resolution, and pathogenicity assessment. Combines ClinVar, gnomAD, computational predictors, and gene-mechanism context.
Comprehensive ADMET (Absorption, Distribution, Metabolism, Excretion, Toxicity) profiling for drug candidates. Integrates ADMET-AI predictions, SwissADME drug-likeness, PubChemTox experimental toxicity, ChEMBL clinical data, Lipinski rule-of-five, and CYP interaction data. Use for drug-likeness assessment, BBB penetration, bioavailability, hepatotoxicity prediction, ADME/PK profiling, or screening compound libraries before lab testing.
Detect and analyze adverse drug event signals using FDA FAERS reports, drug labels, and disproportionality statistics (PRR, ROR, IC). Generates quantitative safety signal scores (0-100) with evidence grading. Use for post-market surveillance, pharmacovigilance, drug safety assessment, regulatory submissions, and detecting rare AE signals not visible in clinical trials.
Map environmental and industrial chemicals to adverse outcome pathways (AOPs) — molecular initiating event to organ-level toxicity. Uses AOPWiki, GHS classification, IARC carcinogen status, and LD50 data. Use for environmental/industrial chemical risk assessment, regulatory-grade hazard characterization, and AOP stressor mapping. Distinct from drug-safety analysis (use tooluniverse-pharmacovigilance for drugs).
Aging biology, cellular senescence, and longevity research. Covers senescence markers (p16/CDKN2A, SASP, SA-beta-gal), aging hallmarks, senolytic drug discovery (dasatinib+quercetin, fisetin, navitoclax), epigenetic clocks, telomere biology, and longevity GWAS. Use for senescence-pathway analysis, age-related disease genetics, senolytic-target discovery, and centenarian-genetics queries. Distinguishes correlative vs causal evidence (knockout, intervention).
Therapeutic antibody engineering and optimization, lead-to-clinical-candidate. Covers sequence humanization (germline alignment, framework retention), affinity maturation, developability (aggregation, stability, PTMs), structure modeling (AlphaFold/PDB CDR analysis), immunogenicity prediction, and manufacturing feasibility. Use for biologic-drug optimization, mAb design review, biosimilar engineering, and clinical-precedent comparison.
Discover novel small-molecule binders for protein targets using structure-based and ligand-based screening. Covers druggability assessment, known-ligand mining (ChEMBL, BindingDB), similarity expansion, ADMET filtering, and synthesis feasibility. Use for hit identification, virtual screening, target-to-compounds workflows, and lead-finding before commit-to-medchem.