Drybench Assay.
Calculate C50 from MTT assay data: a worked example
One 96-well MTT plate worked through: the plate map, percent viability from the controls, Z′, three fitted curves and what each C50 means.
One 96-well plate of A570 readings from an MTT cell-viability assay, generated from known parameters with a seeded noise model so the answer is known: three compounds in a 3-fold series from 100 µM to 5.08 nM, a vehicle column as the 100 percent control, four kill-control wells as the 0 percent control and four blanks. The same plate opens in the app with one click, and the fit below is the one the app computes, recomputed when this page is built.
Walk through it in the app: from a plate export to a reported IC50A guided example on this synthetic plate, step by step in the app; what it adds is labelled and removable in one action.
The plate as read
| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| A | 1.190 | 0.109 | 0.123 | 0.212 | 0.480 | 0.942 | 1.026 | 1.312 | 1.082 | 1.333 | 1.245 | 0.060 |
| B | 1.183 | 0.099 | 0.135 | 0.208 | 0.451 | 0.874 | 1.050 | 1.240 | 1.209 | 1.184 | 1.206 | 0.048 |
| C | 1.277 | 0.099 | 0.156 | 0.219 | 0.445 | 0.833 | 1.086 | 1.111 | 1.268 | 1.209 | 1.206 | 0.053 |
| D | 1.298 | 0.254 | 0.273 | 0.241 | 0.293 | 0.321 | 0.522 | 0.799 | 0.928 | 1.222 | 1.113 | 0.079 |
| E | 1.328 | 0.241 | 0.250 | 0.275 | 0.316 | 0.397 | 0.567 | 0.795 | 1.016 | 1.122 | 1.173 | 0.041 |
| F | 1.271 | 0.207 | 0.262 | 0.273 | 0.263 | 0.378 | 0.570 | 0.786 | 1.003 | 1.177 | 1.165 | 0.040 |
| G | 1.113 | 0.505 | 0.876 | 0.982 | 1.132 | 1.196 | 1.132 | 1.248 | 1.309 | 1.234 | 1.278 | 0.040 |
| H | 1.275 | 0.573 | 0.898 | 1.101 | 1.152 | 1.234 | 1.310 | 1.158 | 1.249 | 1.354 | 1.307 | 0.055 |
The plate map
- Rows A to C: Compound A in triplicate
- Rows D to F: Compound B in triplicate
- Rows G and H: Compound C in duplicate
- Column 1: vehicle (0.5 percent DMSO), eight wells, the 100 percent viability control
- Column 12, rows A to D: kill control, four wells, the 0 percent viability control
- Column 12, rows E to H: blank (medium and MTT, no cells), read but not used
Normalisation and Z′
Percent viability = 100 × (A570 − mean kill) / (mean vehicle − mean kill), with the vehicle mean 1.242 (n = 8) and the kill mean 0.06 (n = 4) from this plate.
Z′ for the plate, vehicle against kill with sample standard deviations: 0.782, at or above the 0.5 convention of Zhang, Chung and Oldenburg 1999, read as an observation.
The three curves
Each compound as the app fits it: the relative IC50 with its 95 percent profile extra-sum-of-squares interval, the Hill slope and the plateaus, beside the value R nls gives for the same data.
| Compound | IC50 (app) | 95 percent interval | Hill | Bottom | R nls logIC50 | Outcome |
|---|---|---|---|---|---|---|
| Compound A | 2.16 µM (log −5.666) | 1.81 µM to 2.59 µM | −1.28 | 3.04 | −5.666 | absolute C50 2.21 µM |
| Compound B | 184 nM (log −6.735) | 152 nM to 220 nM | −0.979 | 15.5 | −6.735 | absolute C50 251 nM |
| Compound C | numerically unresolved | – | – | – | no finite minimum | C50 beyond the highest concentration |
- Compound A. A clean inhibitor: ten concentrations bracket the IC50 with two or more on each plateau, so the relative and the absolute IC50 are both shown and lie close together.
- Compound B. Partial inhibition: the bottom plateau sits near 15 percent, so the relative IC50 (the curve's midpoint) and the absolute IC50 (the crossing of 50 percent of the controls) differ by about 0.14 log units, which is why the app names which one it reports.
- Compound C. A weak compound whose curve has only begun to fall at 100 µM: the finite search does not resolve an identifiable minimum, the IC50 is not bracketed by the tested concentrations, and the app withholds a value instead of extrapolating a number.
Draft until the independent reviewer signs the fixture file and the method page (Q-19).
A template paragraph
Dose-response curves (n = 3) were fitted in Drybench Assay 0.2.0 (fit module 2.0.0) to a four-parameter logistic model in log10 concentration, y = Bottom + (Top − Bottom)/(1 + 10^((logC50 − x)·Hill)), by bounded Levenberg-Marquardt least squares with deterministic starting values. Responses were normalised to each plate's controls (percent = 100 × (y − mean(negative control)) / (mean(positive control) − mean(negative control)); plate 1: 8 positive and 4 negative wells). All four parameters were free. IC50 values are relative (the fitted midpoint). Where estimable, 95 percent profile extra-sum-of-squares intervals are reported on log10 IC50. A bound not resolved within the search is stated as such; zero residual variance gives no estimated-variance interval. No wells were excluded. 1 value was withheld where the tested concentrations did not bracket the C50 or a plateau, or response evidence was insufficient under the permutation test. Fits were run in the browser on 6 October 2026; the engine's agreement with independent implementations is stated on the app's verification page.
- A IC50 is estimated, with an interval, and some curves do not support one; the app withholds those with the reason rather than printing a number.
- Relative and absolute IC50 answer different questions; say which one you report.
- Z′ describes the plate's controls, not the compounds; below 0.5 it is an observation to act on, not a verdict.
- The same plate, the same settings and the same engine version give the same numbers on every run, which is what a methods section needs.
Method
- Four-parameter logistic fit. Hill AV. J Physiol 1910;40:iv-vii (the logistic form); Ritz C, Baty F, Streibig JC, Gerhard D. Dose-response analysis using R. PLoS ONE 2015;10:e0146021 (the LL.4 parameterisation the fixtures map to).Version 2 unweighted estimates and intervals are checked against the compatible R fixtures. Historical relative-loss and reporting-policy fixtures are archival, not validation of IRLS or the permutation gate.
- Profile extra-sum-of-squares interval on log10 C50. The objective rises to its minimum × (1 + F(0.95; 1, n − p)/(n − p)) with the other parameters refitted (brief §4.1); the asymmetrical interval GraphPad's Prism 8 guide names as its initial default (read 5 October 2026); Only unweighted independent Gaussian errors with constant variance; nonlinear F approximation. A bound not reached within 10 log10 units or after an unresolved refit is labelled not bounded within the search, not mathematically infinite. Zero residual variance and relative-weighted fits have no interval.Unweighted profile extra-sum-of-squares computation checked against compatible R fixtures. Uses an approximate nonlinear F threshold; bounds beyond or unresolved within the search are not claimed mathematically infinite.
- Response evidence and reporting policy. A two-sided within-plate permutation test of dose-response rank covariance supplies response evidence at p < 0.05; independent exchangeable observations are required. Exact through n=8, otherwise 1999 fixed-seed permutations with plus-one p-value. This is this app’s reporting policy, not biological-activity proof. Sebaugh JL. Guidelines for accurate EC50/IC50 estimation. Pharm Stat 2011;10:128-134 (PMID 22328315; abstract read 6 October 2026): two concentrations beyond each bend point; bend points at IC50 × 4.6805^(±1/|Hill|) (Sebaugh and McCray 2003, value checked by arithmetic; paper not yet read).Version 2 uses a two-sided within-plate rank permutation test at 0.05 for response evidence, plus numerical, bracketing and plateau checks. Exchangeability is required; this app-specific reporting policy does not establish biological activity. Version 1 F-gate fixtures are archival.
- Absolute IC50: where the fitted curve crosses 50 percent of the controls. Sebaugh 2011: the relative IC50 is the curve's own midpoint (the parameter); the absolute IC50 is the concentration at 50 percent of the 0 and 100 percent controls, shown only with two concentrations predicted on each side of 50.The algebraic 50-percent crossing and dose-side counts are checked against R fixture calculations; biological endpoint naming depends on the assay.
- Z′ (Zhang, Chung and Oldenburg 1999). Zhang J-H, Chung TDY, Oldenburg KR. A simple statistical parameter for use in evaluation and validation of high throughput screening assays. J Biomol Screen 1999;4:67-73 (read 5 October 2026); sample SD (n − 1), n shown.Checked against Z′ worked by hand with sample standard deviations on 5 control sets, including the MTT plate and a set refused for a one-well control, within 1e-9 (2026-10-06); and on 6 degenerate and adverse sets (one well in either control, coinciding means, no spread, a negative Z′) in R, within 1e-9 with the refusals exact (10 October 2026).
- Normalisation to the plate's controls. percent = 100 × (y − μneg)/(μpos − μneg) with per-plate control means (brief §4.1); raw, percent of control and percent inhibition as named alternatives.Unit-tested on the worked MTT plate: percent viability from the vehicle and kill wells agrees with the fixture's formula to 1e-9 (6 October 2026).
Limits
- For research and education only, and not medical advice: a C50 estimated here describes this assay under these conditions and is not a binding constant.
- The app refuses to fit fewer than four distinct concentrations, treats a concentration of zero as a control, and never extrapolates: a C50 the tested concentrations do not bracket is withheld with the reason.
- The relative C50 is the curve's own midpoint; the absolute C50 is where the curve crosses 50 percent of the controls, needs responses on a percent-of-control scale and two concentrations predicted on each side of 50, and is not determinable otherwise.
- Normalisation uses each plate's own control means, and Z′ uses sample standard deviations: Z′ below 0.5 is an observation against Zhang's convention, not a pass mark, and R² is shown but is not a goodness-of-fit gate.