{
  "about": {
    "fixture": "The plate walk's refit: the worked MTT plate's Compound A without well A9",
    "ruling": "CSO follow-up of 10 October 2026 on the plate walk, section 2 (3); D-0028 items 2 and 5",
    "generatedBy": "pipeline/assay-analyser/walk_plate_reference.R",
    "scriptSha256": "7e5d0aa89e5d9b4a6873c06cda8d314b71b552524b34441268e55a1f628864a7",
    "referenceRSha256": "912ea05cabc1bd2ddccee30bc815ee09defd3b505ab717c10c4cbfdbc39420f7",
    "recordedOn": "2026-10-10",
    "r": "R version 4.3.3 (2024-02-29)",
    "packages": [
      {
        "name": "drc",
        "version": "4.0-0"
      },
      {
        "name": "MASS",
        "version": "7.3-60.0.1"
      },
      {
        "name": "jsonlite",
        "version": "1.8.8"
      }
    ],
    "inputs": {
      "mttExample": {
        "file": "pipeline/assay-analyser/fixtures/mtt-example.json",
        "sha256": "50029b58c869ecb47767215f6b6ba9b54ef33575a77dcd1044cf2c6b3c2a8214"
      }
    },
    "origin": "The worked MTT plate: synthetic, generated from known parameters with a seeded noise model",
    "excluded": {
      "well": "A9",
      "compound": "Compound A",
      "concentration_M": 4.57247370827618e-08,
      "reason": "Example walk: excluded to show the route and its record; no fault in this synthetic reading is claimed."
    },
    "tolerances": {
      "ruling": "CSO ruling, 6 October 2026",
      "logIC50": {
        "absolute": 0.00043,
        "unit": "log10 units (0.1 percent in concentration)"
      },
      "hill": {
        "relative": 0.001
      },
      "topAndBottom": {
        "absolute": "0.001 x |Top - Bottom|, from the oracle's estimates"
      },
      "waldBoundsLogIC50": {
        "absolute": 0.0022,
        "unit": "log10 units (0.5 percent in concentration)"
      },
      "profileBoundsLogIC50": {
        "absolute": 0.0043,
        "unit": "log10 units (1 percent in concentration)",
        "appliesTo": "every finite bound of every fitted curve, withheld values included; the two curves with no finite minimum (expected.minimumAttained false: C30 and MTT Compound C) have no profile to compare"
      },
      "unboundedFlags": "exact, using the oracle's search limit of 10 log10 units each side of the estimate",
      "objective": {
        "relative": 1e-06,
        "note": "the engine's (weighted) residual sum of squares within 1e-6 relative of expected.objective; if the engine's is lower, rerun the oracle"
      },
      "fixedParameters": "exact",
      "rules": "withheldBy, shown and every count in ruleChecks exact",
      "notRuled": "The ruling sets no tolerance for F, p, absolute IC50 or Z'; they are arithmetic on the oracle's numbers (suggestion: 1e-6 relative)",
      "never": "No percentage tolerance on a logarithm"
    },
    "rule": "No value in this file comes from the Drybench engine under test.",
    "review": {
      "status": "awaiting the Q-19 reviewer's signature (the CEO names the reviewer)",
      "reviewer": null,
      "signedOn": null
    }
  },
  "normalisation": {
    "meanVehicle": 1.241875,
    "meanKill": 0.06,
    "nVehicle": 8,
    "nKill": 4
  },
  "zPrime": {
    "unchangedByTheExclusion": true,
    "refused": false,
    "meanPositive": 1.241875,
    "meanNegative": 0.06,
    "sdPositive": 0.0722227457245984,
    "sdNegative": 0.013589211407093,
    "nPositive": 8,
    "nNegative": 4,
    "zPrime": 0.782180119390736,
    "belowHalf": false,
    "sd": "sample standard deviation (n - 1 denominator, R sd()); n shown",
    "working": "Z' = 1 - 3 (0.072223 + 0.013589) / |1.241875 - 0.060000| = 0.782180 (n = 8 and 4)",
    "crossCheckPopulationSd": 0.798641663109065
  },
  "responseEvidence": {
    "method": "two-sided within-plate rank-trend permutation (Spearman rank covariance), one block, mid-ranks for ties",
    "statistic": 1892.75,
    "permutations": 100000,
    "asExtreme": 0,
    "p": 9.99990000099999e-06,
    "generator": "R set.seed(20261010), sample()",
    "gate": "p < 0.05 reports a midpoint (D-0028 item 2)",
    "gatePasses": true
  },
  "curve": {
    "compound": "Compound A",
    "excludedWell": "A9",
    "normalised": [
      {
        "well": "A2",
        "concentration_M": 0.0001,
        "A570": 0.109,
        "percentViability": 4.14595452141724
      },
      {
        "well": "A3",
        "concentration_M": 3.33333333333333e-05,
        "A570": 0.123,
        "percentViability": 5.33051295610788
      },
      {
        "well": "A4",
        "concentration_M": 1.11111111111111e-05,
        "A570": 0.212,
        "percentViability": 12.8609201480698
      },
      {
        "well": "A5",
        "concentration_M": 3.7037037037037e-06,
        "A570": 0.48,
        "percentViability": 35.5367530407192
      },
      {
        "well": "A6",
        "concentration_M": 1.23456790123457e-06,
        "A570": 0.942,
        "percentViability": 74.6271813855103
      },
      {
        "well": "A7",
        "concentration_M": 4.11522633744856e-07,
        "A570": 1.026,
        "percentViability": 81.7345319936541
      },
      {
        "well": "A8",
        "concentration_M": 1.37174211248285e-07,
        "A570": 1.312,
        "percentViability": 105.933368588049
      },
      {
        "well": "A10",
        "concentration_M": 1.52415790275873e-08,
        "A570": 1.333,
        "percentViability": 107.710206240085
      },
      {
        "well": "A11",
        "concentration_M": 5.08052634252909e-09,
        "A570": 1.245,
        "percentViability": 100.264410364886
      },
      {
        "well": "B2",
        "concentration_M": 0.0001,
        "A570": 0.099,
        "percentViability": 3.29984135378107
      },
      {
        "well": "B3",
        "concentration_M": 3.33333333333333e-05,
        "A570": 0.135,
        "percentViability": 6.34584875727129
      },
      {
        "well": "B4",
        "concentration_M": 1.11111111111111e-05,
        "A570": 0.208,
        "percentViability": 12.5224748810153
      },
      {
        "well": "B5",
        "concentration_M": 3.7037037037037e-06,
        "A570": 0.451,
        "percentViability": 33.0830248545743
      },
      {
        "well": "B6",
        "concentration_M": 1.23456790123457e-06,
        "A570": 0.874,
        "percentViability": 68.8736118455843
      },
      {
        "well": "B7",
        "concentration_M": 4.11522633744856e-07,
        "A570": 1.05,
        "percentViability": 83.765203595981
      },
      {
        "well": "B8",
        "concentration_M": 1.37174211248285e-07,
        "A570": 1.24,
        "percentViability": 99.8413537810682
      },
      {
        "well": "B9",
        "concentration_M": 4.57247370827618e-08,
        "A570": 1.209,
        "percentViability": 97.2184029613961
      },
      {
        "well": "B10",
        "concentration_M": 1.52415790275873e-08,
        "A570": 1.184,
        "percentViability": 95.1031200423056
      },
      {
        "well": "B11",
        "concentration_M": 5.08052634252909e-09,
        "A570": 1.206,
        "percentViability": 96.9645690111052
      },
      {
        "well": "C2",
        "concentration_M": 0.0001,
        "A570": 0.099,
        "percentViability": 3.29984135378107
      },
      {
        "well": "C3",
        "concentration_M": 3.33333333333333e-05,
        "A570": 0.156,
        "percentViability": 8.12268640930724
      },
      {
        "well": "C4",
        "concentration_M": 1.11111111111111e-05,
        "A570": 0.219,
        "percentViability": 13.4531993654151
      },
      {
        "well": "C5",
        "concentration_M": 3.7037037037037e-06,
        "A570": 0.445,
        "percentViability": 32.5753569539926
      },
      {
        "well": "C6",
        "concentration_M": 1.23456790123457e-06,
        "A570": 0.833,
        "percentViability": 65.404547858276
      },
      {
        "well": "C7",
        "concentration_M": 4.11522633744856e-07,
        "A570": 1.086,
        "percentViability": 86.8112109994712
      },
      {
        "well": "C8",
        "concentration_M": 1.37174211248285e-07,
        "A570": 1.111,
        "percentViability": 88.9264939185616
      },
      {
        "well": "C9",
        "concentration_M": 4.57247370827618e-08,
        "A570": 1.268,
        "percentViability": 102.210470650449
      },
      {
        "well": "C10",
        "concentration_M": 1.52415790275873e-08,
        "A570": 1.209,
        "percentViability": 97.2184029613961
      },
      {
        "well": "C11",
        "concentration_M": 5.08052634252909e-09,
        "A570": 1.206,
        "percentViability": 96.9645690111052
      }
    ],
    "n": 29,
    "distinctConcentrations": 10,
    "drcLL4": {
      "estimates": {
        "b": 1.25461571826051,
        "c": 2.87171605664589,
        "d": 99.3345139867517,
        "e": 2.11364468659771e-06
      },
      "standardErrors": {
        "b": 0.113374451821413,
        "c": 2.01406479455327,
        "d": 1.41671169441084,
        "e": 1.65155814442954e-07
      },
      "wald": {
        "b": {
          "lower": 1.02111666383704,
          "upper": 1.48811477268398
        },
        "c": {
          "lower": -1.27632803547972,
          "upper": 7.0197601487715
        },
        "d": {
          "lower": 96.4167416339761,
          "upper": 102.252286339527
        }
      },
      "dfResidual": 25,
      "tQuantile": 2.0595385527533,
      "rss": 431.550848286153,
      "call": "drm(y ~ conc, data = d, fct = LL.4(fixed = c(NA, NA, NA, NA)), control = drmc(relTol = 1e-12, maxIt = 5000))",
      "inBriefParameterisation": {
        "top": 99.3345139867517,
        "bottom": 2.87171605664589,
        "logIC50": -5.67496801779463,
        "hill": -1.25461571826051
      },
      "note": "cross-check of the minimum only; drc's Wald interval on the linear IC50 scale (e) is never used and not recorded"
    },
    "drcLL24": {
      "role": "cross-check of the Wald interval on log IC50 only",
      "call": "drm(..., fct = LL2.4(fixed = ...)): e is log(IC50), natural log",
      "lnIC50": -13.067098815521,
      "lnIC50StandardError": 0.0781387349875715,
      "waldLogIC50": {
        "lower": -5.74485980689248,
        "upper": -5.6050780132381
      },
      "logIC50": -5.67496891006529,
      "dfResidual": 25
    },
    "nls": {
      "estimates": {
        "top": 99.3345223201865,
        "bottom": 2.87170962636802,
        "logIC50": -5.67496813183572,
        "hill": -1.25461476436555
      },
      "standardErrors": {
        "top": 1.39360661994079,
        "bottom": 2.03014576235496,
        "logIC50": 0.0343295717295344,
        "hill": 0.110665398268402
      },
      "wald": {
        "top": {
          "lower": 96.4643357590462,
          "upper": 102.204708881327
        },
        "bottom": {
          "lower": -1.30945383891075,
          "upper": 7.05287309164679
        },
        "logIC50": {
          "lower": -5.7456712083122,
          "upper": -5.60426505535923
        },
        "hill": {
          "lower": -1.48253441855513,
          "upper": -1.02669511017598
        }
      },
      "dfResidual": 25,
      "tQuantile": 2.0595385527533,
      "objective": 431.550848285716,
      "rss": 431.550848285716,
      "minimumFitted": 3.62940634393027,
      "startedFrom": "truth",
      "convergenceTolerance": 1e-06,
      "earlierAttempts": ["start truth, tol 1e-08: number of iterations exceeded maximum of 1000"],
      "formula": "y ~ bottom + (top - bottom)/(1 + 10^((logIC50 - x) * hill))",
      "objectiveIs": "sum((y - f)^2)",
      "covariance": "(J^T J)^-1 s^2, s^2 = RSS / (n - p)",
      "profileCrossCheck": {
        "implementation": "confint(fit, parm = \"logIC50\") on the nls fit restarted at its solution with tol 1e-6 (or 1e-5): MASS's profile t-statistic, spline-interpolated; a cross-check only",
        "lower": -5.74457657158049,
        "upper": -5.60403841171303,
        "lowerUnbounded": false,
        "upperUnbounded": false,
        "profiledAtTolerance": 1e-06,
        "earlierAttempts": []
      },
      "agreementWithDrc": {
        "maxRelativeDifference": 2.23917606731867e-06,
        "logIC50Difference": -1.14041088572492e-07,
        "objectiveDrcMinusNls": 4.37523794971639e-10
      }
    },
    "status": "fitted",
    "bestFit": {
      "source": "nls",
      "estimates": {
        "top": 99.3345223201865,
        "bottom": 2.87170962636802,
        "logIC50": -5.67496813183572,
        "hill": -1.25461476436555
      },
      "objective": 431.550848285716,
      "df": 25,
      "freeParameters": ["top", "bottom", "logIC50", "hill"],
      "note": "the lowest objective found by nls or drc LL.4; expected.estimates, the profile, the rules and R squared use it"
    },
    "minimumCheck": {
      "method": "optim Nelder-Mead then BFGS (reltol 1e-16), ten rounds, from the best fit",
      "startObjective": 431.550848285716,
      "polishedObjective": 431.550848285509,
      "relativeImprovement": 4.78798334842426e-13,
      "minimumAttained": true,
      "polishedEstimates": {
        "top": 99.334519473907,
        "bottom": 2.87171093855999,
        "logIC50": -5.67496808300542,
        "hill": -1.25461508455333
      }
    },
    "directProfileLogIC50": {
      "method": "logIC50 held fixed and the other free parameters refitted; bounds where the objective = minimum x (1 + F(0.95; 1, n - p) / (n - p)), found with uniroot (tol 1e-10) after bracketing in 0.05 log10 steps; unbounded if not reached within 10 log10 units",
      "objectiveMin": 431.550848285716,
      "threshold": 504.771201218508,
      "lower": -5.74457614721793,
      "upper": -5.60403907892934,
      "lowerUnbounded": false,
      "upperUnbounded": false
    },
    "rSquared": 0.990585521941842,
    "absoluteIC50": {
      "exists": true,
      "logAbsoluteIC50": -5.65913120522878,
      "absoluteIC50_M": 2.19214256447135e-06,
      "withinTestedRange": true,
      "formula": "logAbsIC50 = logIC50 - log10((Top - Bottom) / (50 - Bottom) - 1) / Hill",
      "drcED": 2.19214302258458e-06,
      "drcEDCall": "ED(drc LL.4 fit, 50, type = \"absolute\") (drc's own estimates)"
    },
    "flatLineFTest": {
      "reducedModel": "flat line y = mean(y) over the kept wells (one parameter)",
      "constant": 59.3154506829081,
      "objectiveFlat": 45839.0625183672,
      "objectiveFull": 431.550848285716,
      "weighted": false,
      "n": 29,
      "parametersFull": 4,
      "df1": 3,
      "df2": 25,
      "F": 876.82814687341,
      "p": 1.92377152916516e-25,
      "alpha": 0.05,
      "noResponse": false,
      "working": "F = ((45839.0625 - 431.550848) / 3) / (431.550848 / 25) = 876.828147; p = P(F(3, 25) > F) = 1.92377e-25 (approximate for a nonlinear model)"
    },
    "ruleChecks": {
      "i": {
        "distinctConcentrations": 10,
        "anyConcentrationAtOrBelowZero": false,
        "fires": false
      },
      "ii": {
        "p": 1.92377152916516e-25,
        "fires": false
      },
      "iii": {
        "concentrationsBelowIC50": 6,
        "concentrationsAboveIC50": 4,
        "fires": false
      },
      "iv": {
        "k": 4.6805,
        "bendHalfWidthLog10": 0.534261407259775,
        "plateaus": {
          "top": {
            "free": true,
            "side": "low concentrations",
            "bendPointLog10": -6.20922953909549,
            "bendPoint_M": 6.17689844196727e-07,
            "concentrationsAtOrBeyond": 5,
            "fires": false
          },
          "bottom": {
            "free": true,
            "side": "high concentrations",
            "bendPointLog10": -5.14070672457594,
            "bendPoint_M": 7.23258048828827e-06,
            "concentrationsAtOrBeyond": 3,
            "fires": false
          }
        },
        "fires": false
      },
      "v": {
        "concentrationsPredictedBelow50": 4,
        "concentrationsPredictedAbove50": 6,
        "fires": false
      },
      "vi": {
        "profileWidthLog10": 0.140537068288591,
        "lowerUnbounded": false,
        "upperUnbounded": false,
        "fires": false
      }
    },
    "expected": {
      "status": "fitted",
      "engineMustReport": "a minimum",
      "minimumAttained": true,
      "estimates": {
        "top": 99.3345223201865,
        "bottom": 2.87170962636802,
        "logIC50": -5.67496813183572,
        "hill": -1.25461476436555
      },
      "freeParameters": ["top", "bottom", "logIC50", "hill"],
      "fixed": {},
      "objective": 431.550848285716,
      "objectiveIs": "sum((y - f)^2)",
      "waldLogIC50": {
        "lower": -5.7456712083122,
        "upper": -5.60426505535923,
        "standardError": 0.0343295717295344,
        "dfResidual": 25,
        "tQuantile": 2.0595385527533,
        "source": "nls: logIC50 +/- t(0.975, n - p) x SE, SE from (J^T J)^-1 s^2 at the nls solution"
      },
      "waldNote": null,
      "profileLogIC50": {
        "lower": -5.74457614721793,
        "upper": -5.60403907892934,
        "lowerUnbounded": false,
        "upperUnbounded": false
      },
      "flatLineFTest": {
        "F": 876.82814687341,
        "p": 1.92377152916516e-25,
        "df1": 3,
        "df2": 25,
        "noResponse": false
      },
      "relativeIC50": {
        "shown": true,
        "withheldBy": null,
        "reason": null,
        "logIC50": -5.67496813183572,
        "ic50_M": 2.11364413157728e-06,
        "poorlyDetermined": false,
        "poorlyDeterminedReason": null
      },
      "absoluteIC50": {
        "shown": true,
        "withheldBy": null,
        "reason": null,
        "logAbsoluteIC50": -5.65913120522878,
        "absoluteIC50_M": 2.19214256447135e-06
      }
    },
    "warnings": []
  }
}
