Skip to content
Methods

Reference checks

Reference checks: Drybench Calc

This page lists the reference checks published for Drybench Calc. Each set gives the methods it covers, what the expected values were computed with, the number of cases, the tolerance the app must meet, the date, and the file holding the inputs and expected outputs, so you can open a case and compare it with what the app gives.

Every case was chosen and recorded by the Drybench team; none has been independently reviewed. A reference check tests the calculation, not your data, your experiment or whether a model suits it. Methods without a set are listed on the methods page with their level.

Methods and levelsDocumentation

Published sets

Published verification sets

MethodsOracleFixturesToleranceDateFile
formula-mass, stock-salt-purityRDKit58exact (decimal sums of the same CIAAW 2021 table)2026-10-06formula-mass.jsonRecorded for version 0.1.0; the test suite checks the current engine against it.
stock-salt-purity, c1v1, serial-dilution, recipe-table, pipette-minimum-2ul, dmso-carry-overPython fractions and decimal31nine significant figures; display values exact2026-10-06dilution.jsonRecorded for version 0.1.0; the test suite checks the current engine against it.
pka-temperature-goldbergNumPy15within 0.01 (and within 0.0001) at 4, 25 and 37 °C2026-10-06buffers.jsonRecorded for version 0.1.0; the test suite checks the current engine against it.
extinction-280-pace, a280-beer-lambertBiopython22exact2026-10-06extinction.jsonRecorded for version 0.1.0; the test suite checks the current engine against it.
master-mix-preparationPython fractions and decimal14nine significant figures; refusals exact2026-10-10master-mix.jsonRecorded for version 0.2.0; the test suite checks the current engine against it.
serial-dilution, pipette-minimum-2ul, dmso-carry-overPython fractions and decimal10relative 1e-9; each step exactly the fold; flags exact2026-10-10serial-2.jsonRecorded for version 0.3.0; the test suite checks the current engine against it.
plate-sheet, serial-dilutionPython fractions and decimal22relative 1e-9; wells, roles and refusals exact; compound, carrier and volume balance asserted2026-10-10plate-sheet-2.jsonRecorded for version 0.3.0; the test suite checks the current engine against it.
antibody-dilutionPython fractions and decimal10relative 1e-9; refusals exact2026-10-10antibody-batch.jsonRecorded for version 0.3.0; the test suite checks the current engine against it.
od600-cell-estimatePython fractions and decimal14relative 1e-9; refusals exact2026-10-10od600.jsonRecorded for version 0.3.0; the test suite checks the current engine against it.
buffer-recipe, pka-temperature-goldbergNumPy18mass relative 1e-9; setpoint within 0.01 pH, equal to 2 decimals; refusals exact2026-10-10buffer-recipe.jsonRecorded for version 0.3.0; the test suite checks the current engine against it.
unit-conversion, temperature-offsetPython fractions and decimal44prefix changes and temperature exact as decimal strings; molar bridges relative 1e-9; refusals exact2026-10-10unit-converter.jsonRecorded for version 0.3.0; the test suite checks the current engine against it.
cell-seeding, centrifuge-rcf-rpm, percent-solution, antibody-dilutionPython fractions and decimal41relative 1e-9; refusals, flags and text rows exact2026-10-10preparation-3.jsonRecorded for version 0.3.0; the test suite checks the current engine against it.
a280-beer-lambertPython fractions and decimal14relative 1e-9; refusals exact2026-10-17absorbance-a280.jsonRecorded for version 0.6.0; the test suite checks the current engine against it.
a260-a280-ratioPython fractions and decimal10relative 1e-9; refusals exact2026-10-17absorbance-ratio.jsonRecorded for version 0.6.0; the test suite checks the current engine against it.
a260-rules-of-thumbPython fractions and decimal19relative 1e-9; refusals exact2026-10-17a260-2.jsonRecorded for version 0.5.0; the test suite checks the current engine against it.
cell-counting-volumePython fractions and decimal28relative 1e-9; refusals and receipt integrity exact2026-10-18cell-counting-v3.jsonRecorded for version 0.7.0; the test suite checks the current engine against it.
dose-per-cell-arithmeticPython fractions and decimal35relative 1e-9; refusals and receipt integrity exact2026-10-18dose-plan-v3.jsonRecorded for version 0.7.0; the test suite checks the current engine against it.
dna-mass-from-lengthPython fractions and decimal20relative 1e-9; refusals exact2026-10-21dna-amounts-length.jsonRecorded for version 0.10.0; the test suite checks the current engine against it.
dna-mass-from-lengthPython fractions and decimal49relative 1e-9; display strings exact2026-10-21dna-amounts-length-2.jsonRecorded for version 0.10.0; the test suite checks the current engine against it.
plasmid-dna-amountsPython fractions and decimal23relative 1e-9; refusals and blanks exact2026-10-21ligation-refusals.jsonRecorded for version 0.10.0; the test suite checks the current engine against it.
plasmid-dna-amounts, dna-mass-from-lengthPython fractions and decimal10relative 1e-9; refusals exact2026-10-21cloning-amounts.jsonRecorded for version 0.10.0; the test suite checks the current engine against it.
selection-stockPython fractions and decimal34relative 1e-9; refusals exact2026-10-21selection-stock-2-1.jsonRecorded for version 0.10.0; the test suite checks the current engine against it.
oligo-resuspensionPython fractions and decimal18relative 1e-9; refusals exact2026-10-21oligo-resuspension.jsonRecorded for version 0.10.0; the test suite checks the current engine against it.
batch-stocksPython fractions and decimal40the engine's double bit for bit; within 1e-12 relative; statuses, reasons and the copied text exact2026-10-21batch-stocks-2.jsonRecorded for version 0.10.0; the test suite checks the current engine against it.
cell-counting-volume, dose-per-cell-arithmeticPython fractions and decimal49each receipt reads or reads as null, exactly; density identities within float rounding2026-10-20receipt-integrity-v1.jsonRecorded for version 0.9.0; the test suite checks the current engine against it.
one-intermediate-dilutionPython fractions and decimal13feasibility exact; plan within one grid step2026-10-10intermediate-dilution.jsonRecorded for version 0.2.0; the test suite checks the current engine against it.
pipette-minimum-2ulPython fractions and decimal18exact: each flag2026-10-21pipette-rule-v1.jsonRecorded for version 0.11.0; the test suite checks the current engine against it.
od600-calibrationPython fractions and decimal18relative 1e-9; R² absolute 1e-9; refusals exact2026-10-21od600-calibration-v1.jsonRecorded for version 0.11.0; the test suite checks the current engine against it.
recipe-tablePython fractions and decimal21amounts and diluent relative 1e-9; validity and problems exact2026-10-21recipe-table-2.jsonRecorded for version 0.11.0; the test suite checks the current engine against it.
recipe-tablePython fractions and decimal27amounts and diluent relative 1e-9; validity, problems and diluentWithheld exact2026-10-28recipe-table-2-1.jsonRecorded for version 0.12.0; the test suite checks the current engine against it.
protein-average-massBiopython1equal at one decimal; relative 2e-52026-10-21a280-his6-v1.jsonRecorded for version 0.11.0; the test suite checks the current engine against it.
pka-temperature-goldbergPython fractions and decimal36constants exact; within 1e-9 at 4, 25 and 37 °C, 274 K and 350 K; refusals exact2026-10-21buffers-2.jsonRecorded for version 0.11.0; the test suite checks the current engine against it.
buffer-recipe, pka-temperature-goldbergPython fractions and decimal53pK and setpoint within 1e-9, setpoint equal to two decimals; mass relative 1e-9; refusals exact2026-10-21buffer-recipe-2.jsonRecorded for version 0.11.0; the test suite checks the current engine against it.
sample-normalisationPython fractions and decimal12volumes, masses and limits relative 1e-12; statuses, flags and refusals exact2026-10-17normalization-v1.jsonRecorded for version 0.11.0; the test suite checks the current engine against it.

Oracles and build-time tools

Software the app's numbers were checked against, or its data built with. None of it ships with the app or is a dependency of it.

  • Python fractions and decimal 3.11.15 (Python-2.0; Oracle; 2026-10-06). exact rational and decimal arithmetic for the dilution, molarity, formula-weight and preparation fixtures
  • Python fractions and decimal 3.13.16 (Python-2.0; Oracle; 2026-10-10). exact rational arithmetic for the everyday-preparation fixtures (cell seeding, RCF and RPM, percent solutions, antibody dilution) and Stage D's DNA amounts, ligation, selection stock and oligo resuspension fixtures
  • RDKit 2026.03.6 (BSD-3-Clause; Oracle; 2026-10-06). the molecular formula of each organic compound from PubChem's SMILES, and its own weight for comparison
  • NumPy 2.4.6 (BSD-3-Clause; Oracle; 2026-10-06). Goldberg's equation 12 for pK at 4, 25 and 37 °C
  • NumPy 2.5.3 (BSD-3-Clause; Oracle; 2026-10-10). Goldberg's equation 12 for the buffer-recipe setpoints
  • Biopython 1.85 (Biopython License Agreement (BSD-3-Clause file by file); Oracle; 2026-10-06). ε280 by ProtParam for the extinction fixtures, and the DNA molecular-weight cross-check (dna-length-crosscheck.json)

Fixture tables, computed when the page was built

Every row is one fixture compared with the engine when this page was built; the full sets are the published files, and pipeline/lab-calculators/reference.py wrote them.

Formula weights of salts, hydrates and parents

Expected values from CIAAW 2021 sum in Python decimal, formula from RDKit (Python 3.11.15; RDKit 2026.03.6), recorded 2026-10-06; tolerance exact; 12 of 58 shown, all passing. formula-mass.json sha256 b8319e3e0ef032e2…

InputExpectedOursDifferencePass
imatinib (C29H31N7O)493.615493.6150yes
imatinib mesylate (C30H35N7O4S)589.715589.7150yes
metformin (C4H11N5)129.167129.1670yes
metformin hydrochloride (C4H12ClN5)165.625165.6250yes
dabrafenib (C23H20F3N5O2S2)519.560519.560yes
dabrafenib mesylate (C24H24F3N5O5S3)615.660615.660yes
erlotinib hydrochloride (C22H24ClN3O4)429.901429.9010yes
erlotinib (C22H23N3O4)393.443393.4430yes
sorafenib tosylate (C28H24ClF3N4O6S)637.026637.0260yes
sorafenib (C21H16ClF3N4O3)464.828464.8280yes
doxorubicin hydrochloride (C27H30ClNO11)579.983579.9830yes
doxorubicin (C27H29NO11)543.525543.5250yes

Molarity, dilutions and the salt-form correction

Expected values from Python fractions and decimal (3.11.15), recorded 2026-10-06; tolerance nine significant figures; 12 of 15 shown, all passing. dilution.json sha256 c569983c9d1a2706…

InputExpectedOursDifferencePass
mass-nacl-150mm8.766 g8.766 g0yes
mass-imatinib-mesylate-10mm0.00589715 g0.00589715 g8.673617380e-19yes
mass-erlotinib-hydrochloride-5mm0.00429901 g0.00429901 g8.673617380e-19yes
mass-tris-1m60.5675 g60.5675 g0yes
mass-hepes-20mm1.191505 g1.191505 g0yes
mass-glucose-5um0.0000090078 g0.0000090078 g0yes
mass-edta-500mm18.6118 g18.6118 g0yes
volume-for-mass-imatinib-mesylate0.001928049990249527314041528534970282254988 L0.00192804999 L-4.336808690e-19yes
volume-for-mass-staurosporine0.002143434339104173052314801914515551687847 L0.002143434339 L0yes
volume-for-mass-small0.01428571428571428571428571428571428571429 L0.01428571429 L0yes
c1v1-10mm-to-50um0.000001 L0.000001 L0yes
c1v1-1m-to-150mm0.0075 L0.0075 L0yes

pK at 4, 25 and 37 °C

Expected values from Goldberg 2002 equation 12 in NumPy (NumPy 2.4.6; Python 3.11.15), recorded 2026-10-06; tolerance within 0.01; 12 of 45 shown, all passing. buffers.json sha256 18881ec180af861e…

InputExpectedOursDifferencePass
Tris at 4 °C8.71038.7103-0.00000yes
Tris at 25 °C8.07208.07200.00000yes
Tris at 37 °C7.75277.75270.00004yes
HEPES at 4 °C7.82817.8281-0.00001yes
HEPES at 25 °C7.56407.56400.00000yes
HEPES at 37 °C7.42387.42380.00004yes
MOPS at 4 °C7.46057.46050.00002yes
MOPS at 25 °C7.18407.18400.00000yes
MOPS at 37 °C7.04007.0400-0.00003yes
MES at 4 °C6.46576.46570.00005yes
MES at 25 °C6.27006.27000.00000yes
MES at 37 °C6.16956.1695-0.00002yes

ε280 (cystines / reduced)

Expected values from Biopython Bio.SeqUtils.ProtParam (Biopython 1.85; Python 3.11.15), recorded 2026-10-06; tolerance exact; 12 of 22 shown, all passing. extinction.json sha256 94e04f78b54b8d3a…

InputExpectedOursDifferencePass
Insulin (110 aa)17335 / 1696017335 / 169600yes
Hemoglobin subunit beta (147 aa)15595 / 1547015595 / 154700yes
Transthyretin (147 aa)18575 / 1845018575 / 184500yes
GTPase KRas (189 aa)13660 / 1341013660 / 134100yes
Cellular tumor antigen p53 (393 aa)36035 / 3541036035 / 354100yes
Epidermal growth factor receptor (1210 aa)128890 / 125140128890 / 1251400yes
Spike glycoprotein (1273 aa)148960 / 146460148960 / 1464600yes
Hemoglobin subunit alpha (142 aa)9970 / 99709970 / 99700yes
Tubulin beta chain (444 aa)46340 / 4584046340 / 458400yes
Lysozyme C (147 aa)37970 / 3747037970 / 374700yes
Albumin (607 aa)49915 / 4779049915 / 477900yes
Green fluorescent protein (238 aa)22015 / 2189022015 / 218900yes

DNA molecular weight from length, and the traveled weight's checks

Expected values from Python fractions (3.13.16), recorded 2026-10-21; tolerance relative 1e-9; refusals exact; 12 of 20 shown, all passing. dna-amounts-length.json sha256 c7f7d0736969a593…

InputExpectedOursDifferencePass
ds-circular185369718536970yes
ds-linear-oh926724.572926724.5720yes
ds-linear-phosphate926884.53926884.530yes
ss-linear18475.00618475.0060yes
ss-circular2239574.9252239574.9250yes
ds-1bp617.899617.8990yes
ds-50000bp30894950308949500yes
refuse-50001length-rangelength-range0yes
refuse-zerolength-rangelength-range0yes
refuse-non-integerlength-integerlength-integer0yes
puc19-estimate1659676.7141659676.7140yes
h18-parity1659693.511659693.510yes

DNA weight from length: the shown figures

Expected values from Python fractions and decimal (3.13.16), recorded 2026-10-21; tolerance display strings exact; 7 of 7 shown, all passing. dna-amounts-length-2.json sha256 1138756ec7ace9a9…

InputExpectedOursDifferencePass
display-puc19 (display)1.660 × 10⁶1.660 × 10⁶0yes
display-ds-linear (display)9.267 × 10⁵9.267 × 10⁵0yes
display-ds-short (display)6,0556,0550yes
display-ds-50000 (display)3.089 × 10⁷3.089 × 10⁷0yes
display-ss-20 (display)6.1 × 10³6.1 × 10³0yes
display-ss-short (display)8.6 × 10²8.6 × 10²0yes
display-ss-m13 (display)2.2 × 10⁶2.2 × 10⁶0yes

Ligation insert mass from lengths, and its refusals

Expected values from Python fractions (3.13.16), recorded 2026-10-21; tolerance relative 1e-9; refusals and blanks exact; 12 of 23 shown, all passing. ligation-refusals.json sha256 4242c7d693d633da…

InputExpectedOursDifferencePass
a05-typed40.2084884640.208488460yes
a07-typed57.3263013157.326301310yes
fractional-ratio6.7014147436.7014147438.881784197e-16yes
exponent-mass40.2084884640.208488460yes
ratio-emptyblank: ratio-emptyblank: ratio-empty0yes
ratio-spacesblank: ratio-emptyblank: ratio-empty0yes
ratio-zerorefused: ratio-rangerefused: ratio-range0yes
ratio-negativerefused: ratio-rangerefused: ratio-range0yes
ratio-nanrefused: ratio-numberrefused: ratio-number0yes
ratio-infinityrefused: ratio-numberrefused: ratio-number0yes
ratio-infinity-symbolrefused: ratio-numberrefused: ratio-number0yes
ratio-decimal-commarefused: ratio-numberrefused: ratio-number0yes

Copies, pmol per µL, mass for copies and the ligation's vector weight

Expected values from Python fractions (3.13.16), recorded 2026-10-21; tolerance relative 1e-9; refusals exact; 10 of 10 shown, all passing. cloning-amounts.json sha256 b4baf35dc5b4c0ea…

InputExpectedOursDifferencePass
C013.628465571e+113.628465571e+110.00006103515625yes
P010.030126044180.030126044180yes
P020.006743281130.006743281130yes
M0144.7485235644.748523560yes
M023.0781362873.0781362870yes
L01 (backbone-estimate)40.7547169840.754716980yes
L02 (exact)40.2084884640.208488460yes
L03 (card-estimate)40400yes
L04 (exact)40.2084884640.208488460yes
L05ligation-single-strandedligation-single-stranded0yes

Selection antibiotic stock (2.1.0)

Expected values from Python fractions (3.13.16), recorded 2026-10-21; tolerance relative 1e-9 on every row; refusals exact; 12 of 34 shown, all passing. selection-stock-2-1.json sha256 bf090a031b91d55b…

InputExpectedOursDifferencePass
single-vessel0.001 L stock0.001 L stock0yes
cso-batch0.0011 L stock0.0011 L stock0yes
cso-single0.0005 L stock0.0005 L stock0yes
dead-volume0.00044 L stock0.00044 L stock0yes
cso-weigh-potency0.0005 L stock0.0005 L stock0yes
weigh-as-weighed0.0005 L stock0.0005 L stock0yes
potency-10000.001 L stock0.001 L stock0yes
typed-fw-with-potency0.0005 L stock0.0005 L stock0yes
picked-resolves-dimension0.000482807 L stock0.000482807 L stock0yes
molar-both0.001 L stock0.001 L stock0yes
molar-stock-weigh0.0005 L stock0.0005 L stock0yes
mass-working-molar-stock0.000515995872 L stock0.000515995872 L stock1.084202172e-19yes

Oligo resuspension volume

Expected values from Python fractions (3.13.16), recorded 2026-10-21; tolerance relative 1e-9; refusals exact; 12 of 18 shown, all passing. oligo-resuspension.json sha256 c789fd077c3a873f…

InputExpectedOursDifferencePass
cso-worked0.000250.00025-5.421010862e-2yes
pmol-to-um0.000050.000050yes
umol-to-mm0.0010.0010yes
nmol-to-nm0.0250.0250yes
odd-yield0.0003740.000374-5.421010862e-2yes
tiny1.000000000e-81.000000000e-8-1.654361225e-24yes
refuse-zero-amountoligo-inputoligo-input0yes
refuse-negative-amountoligo-inputoligo-input0yes
refuse-zero-targetoligo-inputoligo-input0yes
refuse-negative-targetoligo-inputoligo-input0yes
blank-amountoligo-emptyoligo-empty0yes
blank-targetoligo-emptyoligo-empty0yes