plugin/skills/tooluniverse-dose-response/SKILL.md
Dose-response / concentration-response curve fitting — IC50, EC50, Hill slope, Emax/Emin efficacy, and relative potency from paired concentration vs response data (enzyme/cell assays, drug screening, agonist/antagonist pharmacology). Fits the 4-parameter logistic (Hill sigmoidal) model. Use when you have concentrations + responses and need a potency value, to compare two compounds' potency, or to judge curve quality. NOT for image-derived dose-response (use tooluniverse-image-analysis) and NOT for survival/regression (use tooluniverse-statistical-modeling).
npx skillsauth add mims-harvard/tooluniverse tooluniverse-dose-responseInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
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.
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.
| 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).
Single curve → IC50 or EC50 (same math; "IC50" for inhibition, "EC50" for activation):
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.
| 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.
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.tools
Generate the success criteria for a task or question, then review work against them. Given a task, goal, or open-ended question, decompose it into scenarios, evaluation perspectives, and fine-grained weighted YES/NO criteria using the Recursive Expansion Tree (RET) method; if work is supplied, score it criterion-by-criterion and surface what is missing or could be better. Use when asked to self-review or check your own work, judge whether a task is done well or completely, build a definition-of-done or completeness checklist, create an evaluation rubric or grading criteria, score or grade answers to a question, set up an LLM-as-judge rubric, or when the user mentions self-review, completeness check, success criteria, evaluation criteria, scoring rubric, Qworld, or the RET algorithm.
tools
Find the real protein target(s) of a peptide from its sequence — peptide target deorphanization / off-target identification, for ANY target class (GPCR, ion channel, protease, cytokine/growth-factor receptor, enzyme, integrin), not only GPCRs. Use when a peptide has a phenotype but does not bind its hypothesized target, when a peptide binds a target in one species or assay but not another, or to screen candidate targets for an orphan peptide. A target-class router steers a multi-route keyless pipeline (PROSITE/ELM motif, BLAST homology, HGNC/InterPro/GPCRdb/GtoPdb target-family enumeration, OpenTargets phenotype anchor, EnsemblCompara/Alliance cross-species reconciliation) plus optional NVIDIA-NIM co-folding (Boltz2, AlphaFold2-Multimer, OpenFold3) for structural confirmation.
tools
Install or update ToolUniverse in Claude Science — create the conda env, install the tooluniverse pip package, and (re)build the tooluniverse-research skill by fetching the current workflow library from GitHub. Use for first-time setup, upgrading the ToolUniverse version, refreshing the bundled workflows after an upstream release, or reinstalling on a new machine.
tools
Install, set up, verify, update, pin, uninstall, or troubleshoot the ToolUniverse plugin on OpenAI Codex. ALWAYS consult this skill for any of those — don't answer from memory, because the exact marketplace name (mims-harvard/ToolUniverse), the "codex plugin marketplace add" then "codex plugin add -m tooluniverse" flow, Codex's startup auto-upgrade behavior, the uvx tooluniverse MCP server, and the API-key env vars are easy to get wrong. Use it whenever someone wants to get ToolUniverse (or "the 1000+ scientific tools" / "the harvard tools") working on Codex, says the Codex plugin or its tools/skills won't load, hits a uvx or MCP-server startup error, asks how Codex updates it, wants to pin or remove it, or finds it running an old tool version — even if they never say the word "plugin". Not for the Claude Code plugin (use tooluniverse-claude-code-plugin), for running research with the tools, or for authoring new tools or skills.