{
 "about": {
  "method": "dna-mass-from-length@1.0.0",
  "recordedOn": "2026-10-21",
  "script": "pipeline/lab-calculators/dna_amounts_length_reference.py",
  "scriptSha256": "50898c272e3bafeeac9ea2e2dca4c9270223af92f90e02b20d131ca7b4268887",
  "source": "The CSO's Stage D rulings of 21 October 2026, item 1; dNMP formulas from PubChem (CIDs 12599, 13945, 135398597, 9700), read 21 October 2026; CIAAW 2021 conventional atomic weights; pUC19 from pipeline/plasmid-map/records/L09137.2.gb",
  "limits": "Estimated from length, assuming equal base composition; free acid, not the sodium salt.",
  "constants": {
   "perBasePair": 617.899,
   "perBasePairExact": "617.899000",
   "perNucleotide": 308.9495,
   "perNucleotideExact": "308.949500",
   "atPair": 617.405,
   "gcPair": 618.393,
   "linearOhPerStrand": -61.964,
   "linearPhosphatePerStrand": 18.015,
   "maxLength": 50000,
   "mwFormulaTolerance": "relative 1e-9"
  },
  "atomicWeights": {
   "H": "126/125",
   "C": "12011/1000",
   "N": "14007/1000",
   "O": "15999/1000",
   "P": "15487/500"
  },
  "tolerances": {
   "values": "within 1e-9 relative",
   "refusals": "exact"
  },
  "crossCheck": {
   "name": "Biopython",
   "version": "1.85",
   "role": "cross-check only; the primary oracle is the fractions computation above",
   "gap": "Biopython's own nucleotide weights table, older than CIAAW 2021",
   "rows": [
    {
     "sequence": "ACGT x 1",
     "strands": "double",
     "topology": "circular",
     "fivePrime": "OH",
     "estimate": 2471.596,
     "exactFromSequence": 2471.596,
     "estimateEqualsExact": true,
     "biopython": 2471.5748,
     "relativeDifference": 8.577453596785235e-06
    },
    {
     "sequence": "ACGT x 1",
     "strands": "double",
     "topology": "linear",
     "fivePrime": "phosphate",
     "estimate": 2507.626,
     "exactFromSequence": 2507.626,
     "estimateEqualsExact": true,
     "biopython": 2507.6054,
     "relativeDifference": 8.214941143535759e-06
    },
    {
     "sequence": "ACGT x 1",
     "strands": "single",
     "topology": "linear",
     "fivePrime": "phosphate",
     "estimate": 1253.813,
     "exactFromSequence": 1253.813,
     "estimateEqualsExact": true,
     "biopython": 1253.8027,
     "relativeDifference": 8.214941143535759e-06
    },
    {
     "sequence": "ACGT x 25",
     "strands": "double",
     "topology": "circular",
     "fivePrime": "OH",
     "estimate": 61789.9,
     "exactFromSequence": 61789.9,
     "estimateEqualsExact": true,
     "biopython": 61789.37,
     "relativeDifference": 8.577453596785235e-06
    },
    {
     "sequence": "ACGT x 25",
     "strands": "double",
     "topology": "linear",
     "fivePrime": "phosphate",
     "estimate": 61825.93,
     "exactFromSequence": 61825.93,
     "estimateEqualsExact": true,
     "biopython": 61825.4006,
     "relativeDifference": 8.562750289401228e-06
    },
    {
     "sequence": "ACGT x 25",
     "strands": "single",
     "topology": "linear",
     "fivePrime": "phosphate",
     "estimate": 30912.965,
     "exactFromSequence": 30912.965,
     "estimateEqualsExact": true,
     "biopython": 30912.7003,
     "relativeDifference": 8.562750289401228e-06
    },
    {
     "sequence": "ACGT x 250",
     "strands": "double",
     "topology": "circular",
     "fivePrime": "OH",
     "estimate": 617899.0,
     "exactFromSequence": 617899.0,
     "estimateEqualsExact": true,
     "biopython": 617893.6999999998,
     "relativeDifference": 8.577453597108912e-06
    },
    {
     "sequence": "ACGT x 250",
     "strands": "double",
     "topology": "linear",
     "fivePrime": "phosphate",
     "estimate": 617935.03,
     "exactFromSequence": 617935.03,
     "estimateEqualsExact": true,
     "biopython": 617929.7305999999,
     "relativeDifference": 8.575982494632162e-06
    },
    {
     "sequence": "ACGT x 250",
     "strands": "single",
     "topology": "linear",
     "fivePrime": "phosphate",
     "estimate": 308967.515,
     "exactFromSequence": 308967.515,
     "estimateEqualsExact": true,
     "biopython": 308964.86529999995,
     "relativeDifference": 8.575982494632162e-06
    }
   ],
   "agreement": "within relative 1e-5 on every row (Biopython's own nucleotide weights, an older table)",
   "maxRelativeDifference": 8.577453597108912e-06
  }
 },
 "oracle": {
  "name": "Python fractions",
  "version": "3.13.16"
 },
 "count": 20,
 "recordedOn": "2026-10-21",
 "cases": [
  {
   "name": "ds-circular",
   "about": "A 3,000 bp circular plasmid, 100 ng",
   "kind": "estimate",
   "input": {
    "length": 3000,
    "strands": "double",
    "topology": "circular",
    "fivePrime": "OH"
   },
   "expect": "ok",
   "expected": {
    "mw": 1853697.0,
    "mwExact": "1853697.000000",
    "perUnit": 617.899,
    "ends": 0.0,
    "ng": 100,
    "pmol": 0.053946249036385126,
    "pmolExact": "0.053946249036"
   }
  },
  {
   "name": "ds-linear-oh",
   "about": "A 1,500 bp linear fragment, 5′-OH ends, 50 ng",
   "kind": "estimate",
   "input": {
    "length": 1500,
    "strands": "double",
    "topology": "linear",
    "fivePrime": "OH"
   },
   "expect": "ok",
   "expected": {
    "mw": 926724.572,
    "mwExact": "926724.572000",
    "perUnit": 617.899,
    "ends": -123.928,
    "ng": 50,
    "pmol": 0.0539534631007928,
    "pmolExact": "0.053953463101"
   }
  },
  {
   "name": "ds-linear-phosphate",
   "about": "A 1,500 bp linear fragment, 5′-phosphate ends",
   "kind": "estimate",
   "input": {
    "length": 1500,
    "strands": "double",
    "topology": "linear",
    "fivePrime": "phosphate"
   },
   "expect": "ok",
   "expected": {
    "mw": 926884.53,
    "mwExact": "926884.530000",
    "perUnit": 617.899,
    "ends": 36.03
   }
  },
  {
   "name": "ss-linear",
   "about": "A 60 nt single-stranded linear oligo, 5′-OH",
   "kind": "estimate",
   "input": {
    "length": 60,
    "strands": "single",
    "topology": "linear",
    "fivePrime": "OH"
   },
   "expect": "ok",
   "expected": {
    "mw": 18475.006,
    "mwExact": "18475.006000",
    "perUnit": 308.9495,
    "ends": -61.964,
    "ng": 1000,
    "pmol": 54.12718133893976,
    "pmolExact": "54.127181338940"
   }
  },
  {
   "name": "ss-circular",
   "about": "An M13-type single-stranded circular genome, 7,249 nt, no end groups, 100 ng",
   "kind": "estimate",
   "input": {
    "length": 7249,
    "strands": "single",
    "topology": "circular",
    "fivePrime": "OH"
   },
   "expect": "ok",
   "expected": {
    "mw": 2239574.9255,
    "mwExact": "2239574.925500",
    "perUnit": 308.9495,
    "ends": 0.0,
    "ng": 100,
    "pmol": 0.04465133042051466,
    "pmolExact": "0.044651330421"
   }
  },
  {
   "name": "ds-1bp",
   "about": "The shortest length, 1 bp circular",
   "kind": "estimate",
   "input": {
    "length": 1,
    "strands": "double",
    "topology": "circular",
    "fivePrime": "OH"
   },
   "expect": "ok",
   "expected": {
    "mw": 617.899,
    "mwExact": "617.899000",
    "perUnit": 617.899,
    "ends": 0.0
   }
  },
  {
   "name": "ds-50000bp",
   "about": "The longest length, 50,000 bp circular",
   "kind": "estimate",
   "input": {
    "length": 50000,
    "strands": "double",
    "topology": "circular",
    "fivePrime": "OH"
   },
   "expect": "ok",
   "expected": {
    "mw": 30894950.0,
    "mwExact": "30894950.000000",
    "perUnit": 617.899,
    "ends": 0.0,
    "ng": 1000,
    "pmol": 0.03236774942183108,
    "pmolExact": "0.032367749422"
   }
  },
  {
   "name": "refuse-50001",
   "about": "One base pair over the cap",
   "kind": "estimate",
   "input": {
    "length": 50001,
    "strands": "double",
    "topology": "circular",
    "fivePrime": "OH"
   },
   "expect": "refused",
   "problem": "length-range"
  },
  {
   "name": "refuse-zero",
   "about": "Zero length",
   "kind": "estimate",
   "input": {
    "length": 0,
    "strands": "double",
    "topology": "circular",
    "fivePrime": "OH"
   },
   "expect": "refused",
   "problem": "length-range"
  },
  {
   "name": "refuse-non-integer",
   "about": "A non-integer length",
   "kind": "estimate",
   "input": {
    "length": 1500.5,
    "strands": "double",
    "topology": "circular",
    "fivePrime": "OH"
   },
   "expect": "refused",
   "problem": "length-integer"
  },
  {
   "name": "puc19-estimate",
   "about": "pUC19 (2,686 bp) by length alone, 1 µg: beside A01's exact 0.602520884 pmol",
   "kind": "estimate",
   "input": {
    "length": 2686,
    "strands": "double",
    "topology": "circular",
    "fivePrime": "OH"
   },
   "expect": "ok",
   "expected": {
    "mw": 1659676.714,
    "mwExact": "1659676.714000",
    "perUnit": 617.899,
    "ends": 0.0,
    "ng": 1000,
    "pmol": 0.6025269810467437,
    "pmolExact": "0.602526981047"
   }
  },
  {
   "name": "h18-parity",
   "about": "pUC19's exact weight traveling from Plasmid (H18) reproduces amounts.json A01",
   "kind": "traveled",
   "input": {
    "length": 2686,
    "strands": "double",
    "topology": "circular",
    "fivePrime": "OH",
    "mw": 1659693.51
   },
   "expect": "ok",
   "expected": {
    "source": "exact",
    "mw": 1659693.51,
    "ng": 1000,
    "pmol": 0.6025208835093896,
    "pmolExact": "0.602520883509",
    "a01": 0.6025208835093896
   }
  },
  {
   "name": "traveled-formula",
   "about": "A weight with its formula, (ACGT)x3 circular: recomputed within 1e-9",
   "kind": "traveled",
   "input": {
    "length": 12,
    "strands": "double",
    "topology": "circular",
    "fivePrime": "OH",
    "mw": 7414.788,
    "formula": "C234H294N90O144P24"
   },
   "expect": "ok",
   "expected": {
    "source": "exact",
    "mw": 7414.788
   }
  },
  {
   "name": "refuse-formula-mismatch",
   "about": "A weight that disagrees with its own formula by 1 part in 10^6",
   "kind": "traveled",
   "input": {
    "length": 12,
    "strands": "double",
    "topology": "circular",
    "fivePrime": "OH",
    "mw": 7414.795414788,
    "formula": "C234H294N90O144P24"
   },
   "expect": "refused",
   "problem": "mw-formula-mismatch",
   "recomputed": 7414.788
  },
  {
   "name": "homopolymer-phosphate-no-end-named",
   "about": "An exact all-GC 20 bp linear weight with 5′-phosphate ends, sent without naming its 5′ end: within the union bounds",
   "kind": "traveled",
   "input": {
    "length": 20,
    "strands": "double",
    "topology": "linear",
    "fivePrime": null,
    "mw": 12403.89
   },
   "expect": "ok",
   "expected": {
    "source": "exact",
    "mw": 12403.89
   }
  },
  {
   "name": "refuse-homopolymer-phosphate-as-oh",
   "about": "The same weight sent as 5′-OH: above the 5′-OH all-GC bound",
   "kind": "traveled",
   "input": {
    "length": 20,
    "strands": "double",
    "topology": "linear",
    "fivePrime": "OH",
    "mw": 12403.89
   },
   "expect": "refused",
   "problem": "mw-out-of-bounds",
   "bounds": [
    12224.172,
    12243.932
   ]
  },
  {
   "name": "refuse-out-of-bounds-high",
   "about": "A crafted weight above the all-GC bound for 2,686 bp",
   "kind": "traveled",
   "input": {
    "length": 2686,
    "strands": "double",
    "topology": "circular",
    "fivePrime": "OH",
    "mw": 1661004.598
   },
   "expect": "refused",
   "problem": "mw-out-of-bounds",
   "bounds": [
    1658349.83,
    1661003.598
   ]
  },
  {
   "name": "refuse-out-of-bounds-low",
   "about": "A crafted weight below the all-AT bound for 2,686 bp",
   "kind": "traveled",
   "input": {
    "length": 2686,
    "strands": "double",
    "topology": "circular",
    "fivePrime": "OH",
    "mw": 1658348.83
   },
   "expect": "refused",
   "problem": "mw-out-of-bounds",
   "bounds": [
    1658349.83,
    1661003.598
   ]
  },
  {
   "name": "drop-on-topology-edit",
   "about": "pUC19's exact weight, then the topology is changed to linear: the weight is dropped and estimated",
   "kind": "traveled",
   "input": {
    "length": 2686,
    "strands": "double",
    "topology": "circular",
    "fivePrime": "OH",
    "mw": 1659693.51,
    "edited": {
     "topology": "linear"
    }
   },
   "expect": "ok",
   "expected": {
    "source": "estimate",
    "mw": 1659552.786,
    "mwExact": "1659552.786000"
   }
  },
  {
   "name": "drop-on-length-edit",
   "about": "pUC19's exact weight, then the length is edited to 2,700 bp: dropped and estimated",
   "kind": "traveled",
   "input": {
    "length": 2686,
    "strands": "double",
    "topology": "circular",
    "fivePrime": "OH",
    "mw": 1659693.51,
    "edited": {
     "length": 2700
    }
   },
   "expect": "ok",
   "expected": {
    "source": "estimate",
    "mw": 1668327.3,
    "mwExact": "1668327.300000"
   }
  }
 ]
}
