{
 "about": {
  "generatedBy": "pipeline/sequence-toolkit/reference.py",
  "scriptSha256": "1bc66633d1a780a7f255b02743e9258652769ed35b770f193c5d74e0070410d6",
  "recordedOn": "2026-10-06",
  "python": "3.11.15",
  "oracle": "Biopython 1.88 Bio.SeqUtils.MeltingTemp.Tm_NN, nn_table=DNA_NN3",
  "oracleLicence": "Biopython Licence Agreement or BSD-3-Clause (MeltingTemp.py is dual-licensed)",
  "rule": "No value in this file comes from the Drybench engine under test.",
  "fixture": "Oligo Tm, 45 cases under two concentration models, plus refusals and acceptance cases (brief section 4.3 (2); CSO ruling, 6 October 2026)",
  "tolerance": "Tm within 0.1 C of Biopython 1.88 in both models; saltRegime.R to 1e-9 relative; saltRegime.regimeId and nearBoundary exact (T36-T39 and T43-T45 sit near a regime boundary); refusals and acceptance exact",
  "table": "Biopython documents DNA_NN3 as Allawi & SantaLucia (1997). Its 10 Watson-Crick stacks, initiation (0.1/-2.8 with a terminal G-C, 2.3/4.1 with a terminal A-T) and symmetry (0/-1.4) terms equal SantaLucia 1998 (PNAS 95:1460, doi:10.1073/pnas.95.4.1460) Table 2 as read at https://pmc.ncbi.nlm.nih.gov/articles/PMC19045/ on 2026-10-06; reference.py asserts this on every run (the other DNA_NN3 keys are zero). The values are in fixtureTable below.",
  "entropyCorrection": "saltcorr=5 adds 0.368 (N - 1) ln[Na+] (mol/L) to dS, N = oligo length. SantaLucia 1998 Eq. 7 gives dG37 = dG37(1 M) - 0.114 kcal/mol x N' x ln[Na+], N' = total phosphates in the duplex / 2 (= N - 1 for 5'-OH oligos); with dH salt-independent, 0.114 / 310.15 K = 0.368 cal/(K mol). The paper's entropy form (Eq. 8) is rendered as an image on PMC and was not read verbatim.",
  "formula": "Tm = 1000 dH / (dS + R ln(k)) - 273.15 with R = 1.987 cal/(K mol); salt correction then applied as saltCorrectionApplies says",
  "concentrationModels": "CSO ruling, 6 October 2026. primerInExcess (the default): the oligo concentration C is the primer's, in excess over its template; k = C (Biopython dnac1 = C, dnac2 = 0, selfcomp False; SantaLucia and Hicks 2004, CA - CB/2 with CB -> 0); a self-complementary oligo is an ordinary primer here and its self-duplex is the dimer check's business. equalStrands (the named alternative): C is the total strand concentration; k = C/4 (dnac1 = dnac2 = C/2), or for a self-complementary oligo k = C with the symmetry term (selfcomp True, x = 1; SantaLucia 1998).",
  "modelDifference": "primerInExcess minus equalStrands, by group: length15to25 (30 cases): 1.57 to 2.58 C; length30to40 (9 cases): 0.97 to 1.45 C; selfComplementary (6 cases): 0.74 to 1.18 C. The card states the equal-strands value instead of a fixed difference (CSO confirmation, item 7).",
  "cardWording": {
   "concentration": "Primer at {C} nM, in excess over its template. Equal strands ({C} nM total): {Tm_eq} °C.",
   "risk": "0.7–2.6 °C above equal-strands tools, less for longer oligos",
   "nearBoundary": "Near an Owczarzy 2008 regime boundary; Tm can step here.",
   "show": "Tm (primerInExcess) and {Tm_eq} (equalStrands), both gated within 0.1 C; R and the regime whenever Mg2+ > 0; the near-boundary line when saltRegime.nearBoundary is true",
   "source": "CSO ruling, 6 October 2026 (items 1 and 2) and the CSO's confirmation of the same day (item 7), verbatim"
  },
  "saltDetails": "CSO ruling: when Mg2+ > 0, Owczarzy 2008 (saltcorr 7) is the only correction, and Tm never uses a sodium equivalent (Biopython's methods 5 and 6 would add a von Ahsen 2001 equivalent, so every saltcorr 5 and 6 case has Mg2+ = 0). Method 7 uses Mon = Na + K + Tris/2 in mol/L and free Mg2+ from the Mg2+:dNTP equilibrium (Ka = 3e4 M-1); R = sqrt(free Mg2+) / Mon. R < 0.22: the 2004 monovalent formula; 0.22 <= R < 6: a, d and g adjusted for [Mon+]; R >= 6 or no monovalent ions: the original constants. The switch is reproduced exactly, never smoothed; nearBoundary marks R in 0.198-0.242 or 5.4-6.6 (the card's 'Near an Owczarzy 2008 regime boundary; Tm can step here').",
  "fixtureTable": {
   "init": [
    0,
    0
   ],
   "init_A/T": [
    2.3,
    4.1
   ],
   "init_G/C": [
    0.1,
    -2.8
   ],
   "init_oneG/C": [
    0,
    0
   ],
   "init_allA/T": [
    0,
    0
   ],
   "init_5T/A": [
    0,
    0
   ],
   "sym": [
    0,
    -1.4
   ],
   "AA/TT": [
    -7.9,
    -22.2
   ],
   "AT/TA": [
    -7.2,
    -20.4
   ],
   "TA/AT": [
    -7.2,
    -21.3
   ],
   "CA/GT": [
    -8.5,
    -22.7
   ],
   "GT/CA": [
    -8.4,
    -22.4
   ],
   "CT/GA": [
    -7.8,
    -21.0
   ],
   "GA/CT": [
    -8.2,
    -22.2
   ],
   "CG/GC": [
    -10.6,
    -27.2
   ],
   "GC/CG": [
    -9.8,
    -24.4
   ],
   "GG/CC": [
    -8.0,
    -19.9
   ]
  },
  "refusalRule": "CSO ruling: the engine refuses an oligo containing any character other than A, C, G or T (after removing line breaks and other whitespace and upper-casing) and an oligo shorter than 2 nt; it returns no Tm, and its reason names each offending character with its 1-based position in the cleaned sequence. Biopython does not refuse (check=True deletes or converts characters; I uses its inosine table; a 1-nt oligo returns a negative Tm): its values are recorded as mustNotEqual_C."
 },
 "cases": [
  {
   "id": "T01",
   "input": {
    "sequence": "ATTAGTAAATTAGCT",
    "name": "d15-at",
    "length": 15,
    "gcPercent": 20.0,
    "selfComplementary": false,
    "oligoConcentration_nM": 250,
    "Na_mM": 50,
    "K_mM": 0,
    "Tris_mM": 0,
    "Mg_mM": 0,
    "dNTPs_mM": 0,
    "complement": "perfect complement (c_seq=None), no dangling ends, no mismatches"
   },
   "expected": {
    "defaultModel": "primerInExcess",
    "primerInExcess": {
     "tm_C": 31.079947809120483,
     "concentrationTerm_nM": 250.0,
     "dnac1_nM": 250,
     "dnac2_nM": 0,
     "symmetryTerm": false
    },
    "equalStrands": {
     "tm_C": 28.661927185426293,
     "concentrationTerm_nM": 62.5,
     "dnac1_nM": 125.0,
     "dnac2_nM": 125.0,
     "symmetryTerm": false,
     "x": 4
    },
    "saltRegime": {
     "R": 0.0,
     "freeMg_mM": 0,
     "regimeId": null,
     "regime": "no Mg2+: Owczarzy 2008 not applied (R = 0)",
     "nearBoundary": false,
     "appliedCorrection": "owczarzy-2004",
     "note": "R, the regime and nearBoundary use free Mg2+; the regime decides the Tm where Owczarzy 2008 is applied (Mg2+ > 0)."
    }
   },
   "oracleIntermediates": {
    "primerInExcess": {
     "deltaH_kcal_per_mol": -104.59999999999954,
     "deltaS_cal_per_K_mol": -295.09999999999854,
     "tmWithoutSaltCorrection_C": 48.39342182830893
    },
    "equalStrands": {
     "deltaH_kcal_per_mol": -104.60000000000056,
     "deltaS_cal_per_K_mol": -295.1000000000018,
     "tmWithoutSaltCorrection_C": 45.693576155244216
    },
    "saltCorrection": 0.00017698751333353126,
    "saltCorrectionApplies": "1/Tm(K) += corr",
    "derivation": "dH and dS recovered from two Biopython Tm_NN evaluations with saltcorr=0 at concentration terms k and 10k; they include initiation and, in equalStrands for a self-complementary oligo, the symmetry term."
   },
   "method": {
    "nn": "santalucia-1998",
    "nnTable": "Biopython DNA_NN3",
    "salt": "owczarzy-2004",
    "saltText": "Owczarzy et al. 2004: 1/Tm = 1/Tm(1 M) + (4.29 fGC - 3.95) 1e-5 ln[Na+] + 9.40e-6 ln^2[Na+]",
    "concentration": "primerInExcess by default; equalStrands as the named alternative"
   },
   "oracle": "Biopython Bio.SeqUtils.MeltingTemp.Tm_NN",
   "oracleVersion": "1.88",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (oligo-tm)",
   "call": {
    "primerInExcess": "Bio.SeqUtils.MeltingTemp.Tm_NN('ATTAGTAAATTAGCT', check=True, strict=True, nn_table=DNA_NN3, dnac1=250, dnac2=0, selfcomp=False, Na=50, K=0, Tris=0, Mg=0, dNTPs=0, saltcorr=6)",
    "equalStrands": "Bio.SeqUtils.MeltingTemp.Tm_NN('ATTAGTAAATTAGCT', check=True, strict=True, nn_table=DNA_NN3, dnac1=125.0, dnac2=125.0, selfcomp=False, Na=50, K=0, Tris=0, Mg=0, dNTPs=0, saltcorr=6)"
   },
   "notes": "15-mer, 20% GC"
  },
  {
   "id": "T02",
   "input": {
    "sequence": "GCCGGTCCAGCGGCA",
    "name": "d15-gc",
    "length": 15,
    "gcPercent": 80.0,
    "selfComplementary": false,
    "oligoConcentration_nM": 250,
    "Na_mM": 50,
    "K_mM": 0,
    "Tris_mM": 0,
    "Mg_mM": 0,
    "dNTPs_mM": 0,
    "complement": "perfect complement (c_seq=None), no dangling ends, no mismatches"
   },
   "expected": {
    "defaultModel": "primerInExcess",
    "primerInExcess": {
     "tm_C": 65.33193876269729,
     "concentrationTerm_nM": 250.0,
     "dnac1_nM": 250,
     "dnac2_nM": 0,
     "symmetryTerm": false
    },
    "equalStrands": {
     "tm_C": 62.756368003141745,
     "concentrationTerm_nM": 62.5,
     "dnac1_nM": 125.0,
     "dnac2_nM": 125.0,
     "symmetryTerm": false,
     "x": 4
    },
    "saltRegime": {
     "R": 0.0,
     "freeMg_mM": 0,
     "regimeId": null,
     "regime": "no Mg2+: Owczarzy 2008 not applied (R = 0)",
     "nearBoundary": false,
     "appliedCorrection": "owczarzy-2004",
     "note": "R, the regime and nearBoundary use free Mg2+; the regime decides the Tm where Owczarzy 2008 is applied (Mg2+ > 0)."
    }
   },
   "oracleIntermediates": {
    "primerInExcess": {
     "deltaH_kcal_per_mol": -121.59999999999998,
     "deltaS_cal_per_K_mol": -316.8999999999999,
     "tmWithoutSaltCorrection_C": 77.17527462347255
    },
    "equalStrands": {
     "deltaH_kcal_per_mol": -121.59999999999998,
     "deltaS_cal_per_K_mol": -316.8999999999999,
     "tmWithoutSaltCorrection_C": 74.41704882427382
    },
    "saltCorrection": 9.987736461225153e-05,
    "saltCorrectionApplies": "1/Tm(K) += corr",
    "derivation": "dH and dS recovered from two Biopython Tm_NN evaluations with saltcorr=0 at concentration terms k and 10k; they include initiation and, in equalStrands for a self-complementary oligo, the symmetry term."
   },
   "method": {
    "nn": "santalucia-1998",
    "nnTable": "Biopython DNA_NN3",
    "salt": "owczarzy-2004",
    "saltText": "Owczarzy et al. 2004: 1/Tm = 1/Tm(1 M) + (4.29 fGC - 3.95) 1e-5 ln[Na+] + 9.40e-6 ln^2[Na+]",
    "concentration": "primerInExcess by default; equalStrands as the named alternative"
   },
   "oracle": "Biopython Bio.SeqUtils.MeltingTemp.Tm_NN",
   "oracleVersion": "1.88",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (oligo-tm)",
   "call": {
    "primerInExcess": "Bio.SeqUtils.MeltingTemp.Tm_NN('GCCGGTCCAGCGGCA', check=True, strict=True, nn_table=DNA_NN3, dnac1=250, dnac2=0, selfcomp=False, Na=50, K=0, Tris=0, Mg=0, dNTPs=0, saltcorr=6)",
    "equalStrands": "Bio.SeqUtils.MeltingTemp.Tm_NN('GCCGGTCCAGCGGCA', check=True, strict=True, nn_table=DNA_NN3, dnac1=125.0, dnac2=125.0, selfcomp=False, Na=50, K=0, Tris=0, Mg=0, dNTPs=0, saltcorr=6)"
   },
   "notes": "15-mer, 80% GC"
  },
  {
   "id": "T03",
   "input": {
    "sequence": "GTAAAACGACGGCCAGT",
    "name": "M13F-20",
    "length": 17,
    "gcPercent": 52.94117647058823,
    "selfComplementary": false,
    "oligoConcentration_nM": 250,
    "Na_mM": 50,
    "K_mM": 0,
    "Tris_mM": 0,
    "Mg_mM": 0,
    "dNTPs_mM": 0,
    "complement": "perfect complement (c_seq=None), no dangling ends, no mismatches"
   },
   "expected": {
    "defaultModel": "primerInExcess",
    "primerInExcess": {
     "tm_C": 53.583796229830284,
     "concentrationTerm_nM": 250.0,
     "dnac1_nM": 250,
     "dnac2_nM": 0,
     "symmetryTerm": false
    },
    "equalStrands": {
     "tm_C": 51.397449061573354,
     "concentrationTerm_nM": 62.5,
     "dnac1_nM": 125.0,
     "dnac2_nM": 125.0,
     "symmetryTerm": false,
     "x": 4
    },
    "saltRegime": {
     "R": 0.0,
     "freeMg_mM": 0,
     "regimeId": null,
     "regime": "no Mg2+: Owczarzy 2008 not applied (R = 0)",
     "nearBoundary": false,
     "appliedCorrection": "owczarzy-2004",
     "note": "R, the regime and nearBoundary use free Mg2+; the regime decides the Tm where Owczarzy 2008 is applied (Mg2+ > 0)."
    }
   },
   "oracleIntermediates": {
    "primerInExcess": {
     "deltaH_kcal_per_mol": -133.59999999999803,
     "deltaS_cal_per_K_mol": -360.69999999999413,
     "tmWithoutSaltCorrection_C": 68.62015614210299
    },
    "equalStrands": {
     "deltaH_kcal_per_mol": -133.6000000000014,
     "deltaS_cal_per_K_mol": -360.700000000004,
     "tmWithoutSaltCorrection_C": 66.2286827008989
    },
    "saltCorrection": 0.00013465252972184828,
    "saltCorrectionApplies": "1/Tm(K) += corr",
    "derivation": "dH and dS recovered from two Biopython Tm_NN evaluations with saltcorr=0 at concentration terms k and 10k; they include initiation and, in equalStrands for a self-complementary oligo, the symmetry term."
   },
   "method": {
    "nn": "santalucia-1998",
    "nnTable": "Biopython DNA_NN3",
    "salt": "owczarzy-2004",
    "saltText": "Owczarzy et al. 2004: 1/Tm = 1/Tm(1 M) + (4.29 fGC - 3.95) 1e-5 ln[Na+] + 9.40e-6 ln^2[Na+]",
    "concentration": "primerInExcess by default; equalStrands as the named alternative"
   },
   "oracle": "Biopython Bio.SeqUtils.MeltingTemp.Tm_NN",
   "oracleVersion": "1.88",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (oligo-tm)",
   "call": {
    "primerInExcess": "Bio.SeqUtils.MeltingTemp.Tm_NN('GTAAAACGACGGCCAGT', check=True, strict=True, nn_table=DNA_NN3, dnac1=250, dnac2=0, selfcomp=False, Na=50, K=0, Tris=0, Mg=0, dNTPs=0, saltcorr=6)",
    "equalStrands": "Bio.SeqUtils.MeltingTemp.Tm_NN('GTAAAACGACGGCCAGT', check=True, strict=True, nn_table=DNA_NN3, dnac1=125.0, dnac2=125.0, selfcomp=False, Na=50, K=0, Tris=0, Mg=0, dNTPs=0, saltcorr=6)"
   },
   "notes": ""
  },
  {
   "id": "T04",
   "input": {
    "sequence": "TAATACGACTCACTATAGGG",
    "name": "T7-promoter",
    "length": 20,
    "gcPercent": 40.0,
    "selfComplementary": false,
    "oligoConcentration_nM": 250,
    "Na_mM": 50,
    "K_mM": 0,
    "Tris_mM": 0,
    "Mg_mM": 0,
    "dNTPs_mM": 0,
    "complement": "perfect complement (c_seq=None), no dangling ends, no mismatches"
   },
   "expected": {
    "defaultModel": "primerInExcess",
    "primerInExcess": {
     "tm_C": 47.596985252370416,
     "concentrationTerm_nM": 250.0,
     "dnac1_nM": 250,
     "dnac2_nM": 0,
     "symmetryTerm": false
    },
    "equalStrands": {
     "tm_C": 45.703750337130145,
     "concentrationTerm_nM": 62.5,
     "dnac1_nM": 125.0,
     "dnac2_nM": 125.0,
     "symmetryTerm": false,
     "x": 4
    },
    "saltRegime": {
     "R": 0.0,
     "freeMg_mM": 0,
     "regimeId": null,
     "regime": "no Mg2+: Owczarzy 2008 not applied (R = 0)",
     "nearBoundary": false,
     "appliedCorrection": "owczarzy-2004",
     "note": "R, the regime and nearBoundary use free Mg2+; the regime decides the Tm where Owczarzy 2008 is applied (Mg2+ > 0)."
    }
   },
   "oracleIntermediates": {
    "primerInExcess": {
     "deltaH_kcal_per_mol": -148.79999999999623,
     "deltaS_cal_per_K_mol": -411.19999999998885,
     "tmWithoutSaltCorrection_C": 63.95462611136554
    },
    "equalStrands": {
     "deltaH_kcal_per_mol": -148.80000000000044,
     "deltaS_cal_per_K_mol": -411.20000000000124,
     "tmWithoutSaltCorrection_C": 61.863991910319044
    },
    "saltCorrection": 0.00015128413042643803,
    "saltCorrectionApplies": "1/Tm(K) += corr",
    "derivation": "dH and dS recovered from two Biopython Tm_NN evaluations with saltcorr=0 at concentration terms k and 10k; they include initiation and, in equalStrands for a self-complementary oligo, the symmetry term."
   },
   "method": {
    "nn": "santalucia-1998",
    "nnTable": "Biopython DNA_NN3",
    "salt": "owczarzy-2004",
    "saltText": "Owczarzy et al. 2004: 1/Tm = 1/Tm(1 M) + (4.29 fGC - 3.95) 1e-5 ln[Na+] + 9.40e-6 ln^2[Na+]",
    "concentration": "primerInExcess by default; equalStrands as the named alternative"
   },
   "oracle": "Biopython Bio.SeqUtils.MeltingTemp.Tm_NN",
   "oracleVersion": "1.88",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (oligo-tm)",
   "call": {
    "primerInExcess": "Bio.SeqUtils.MeltingTemp.Tm_NN('TAATACGACTCACTATAGGG', check=True, strict=True, nn_table=DNA_NN3, dnac1=250, dnac2=0, selfcomp=False, Na=50, K=0, Tris=0, Mg=0, dNTPs=0, saltcorr=6)",
    "equalStrands": "Bio.SeqUtils.MeltingTemp.Tm_NN('TAATACGACTCACTATAGGG', check=True, strict=True, nn_table=DNA_NN3, dnac1=125.0, dnac2=125.0, selfcomp=False, Na=50, K=0, Tris=0, Mg=0, dNTPs=0, saltcorr=6)"
   },
   "notes": "reference condition for T05, T06, T19 and the acceptance cases"
  },
  {
   "id": "T05",
   "input": {
    "sequence": "TAATACGACTCACTATAGGG",
    "name": "T7-promoter",
    "length": 20,
    "gcPercent": 40.0,
    "selfComplementary": false,
    "oligoConcentration_nM": 500,
    "Na_mM": 50,
    "K_mM": 0,
    "Tris_mM": 0,
    "Mg_mM": 0,
    "dNTPs_mM": 0,
    "complement": "perfect complement (c_seq=None), no dangling ends, no mismatches"
   },
   "expected": {
    "defaultModel": "primerInExcess",
    "primerInExcess": {
     "tm_C": 48.55205880787315,
     "concentrationTerm_nM": 500.0,
     "dnac1_nM": 500,
     "dnac2_nM": 0,
     "symmetryTerm": false
    },
    "equalStrands": {
     "tm_C": 46.64756578230339,
     "concentrationTerm_nM": 125.0,
     "dnac1_nM": 250.0,
     "dnac2_nM": 250.0,
     "symmetryTerm": false,
     "x": 4
    },
    "saltRegime": {
     "R": 0.0,
     "freeMg_mM": 0,
     "regimeId": null,
     "regime": "no Mg2+: Owczarzy 2008 not applied (R = 0)",
     "nearBoundary": false,
     "appliedCorrection": "owczarzy-2004",
     "note": "R, the regime and nearBoundary use free Mg2+; the regime decides the Tm where Owczarzy 2008 is applied (Mg2+ > 0)."
    }
   },
   "oracleIntermediates": {
    "primerInExcess": {
     "deltaH_kcal_per_mol": -148.80000000000044,
     "deltaS_cal_per_K_mol": -411.2000000000012,
     "tmWithoutSaltCorrection_C": 65.00975869390612
    },
    "equalStrands": {
     "deltaH_kcal_per_mol": -148.80000000000044,
     "deltaS_cal_per_K_mol": -411.20000000000124,
     "tmWithoutSaltCorrection_C": 62.906057537631
    },
    "saltCorrection": 0.00015128413042643803,
    "saltCorrectionApplies": "1/Tm(K) += corr",
    "derivation": "dH and dS recovered from two Biopython Tm_NN evaluations with saltcorr=0 at concentration terms k and 10k; they include initiation and, in equalStrands for a self-complementary oligo, the symmetry term."
   },
   "method": {
    "nn": "santalucia-1998",
    "nnTable": "Biopython DNA_NN3",
    "salt": "owczarzy-2004",
    "saltText": "Owczarzy et al. 2004: 1/Tm = 1/Tm(1 M) + (4.29 fGC - 3.95) 1e-5 ln[Na+] + 9.40e-6 ln^2[Na+]",
    "concentration": "primerInExcess by default; equalStrands as the named alternative"
   },
   "oracle": "Biopython Bio.SeqUtils.MeltingTemp.Tm_NN",
   "oracleVersion": "1.88",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (oligo-tm)",
   "call": {
    "primerInExcess": "Bio.SeqUtils.MeltingTemp.Tm_NN('TAATACGACTCACTATAGGG', check=True, strict=True, nn_table=DNA_NN3, dnac1=500, dnac2=0, selfcomp=False, Na=50, K=0, Tris=0, Mg=0, dNTPs=0, saltcorr=6)",
    "equalStrands": "Bio.SeqUtils.MeltingTemp.Tm_NN('TAATACGACTCACTATAGGG', check=True, strict=True, nn_table=DNA_NN3, dnac1=250.0, dnac2=250.0, selfcomp=False, Na=50, K=0, Tris=0, Mg=0, dNTPs=0, saltcorr=6)"
   },
   "notes": "as T04 at 0.5 uM"
  },
  {
   "id": "T06",
   "input": {
    "sequence": "TAATACGACTCACTATAGGG",
    "name": "T7-promoter",
    "length": 20,
    "gcPercent": 40.0,
    "selfComplementary": false,
    "oligoConcentration_nM": 250,
    "Na_mM": 1000,
    "K_mM": 0,
    "Tris_mM": 0,
    "Mg_mM": 0,
    "dNTPs_mM": 0,
    "complement": "perfect complement (c_seq=None), no dangling ends, no mismatches"
   },
   "expected": {
    "defaultModel": "primerInExcess",
    "primerInExcess": {
     "tm_C": 63.95462611136554,
     "concentrationTerm_nM": 250.0,
     "dnac1_nM": 250,
     "dnac2_nM": 0,
     "symmetryTerm": false
    },
    "equalStrands": {
     "tm_C": 61.863991910319044,
     "concentrationTerm_nM": 62.5,
     "dnac1_nM": 125.0,
     "dnac2_nM": 125.0,
     "symmetryTerm": false,
     "x": 4
    },
    "saltRegime": {
     "R": 0.0,
     "freeMg_mM": 0,
     "regimeId": null,
     "regime": "no Mg2+: Owczarzy 2008 not applied (R = 0)",
     "nearBoundary": false,
     "appliedCorrection": "owczarzy-2004",
     "note": "R, the regime and nearBoundary use free Mg2+; the regime decides the Tm where Owczarzy 2008 is applied (Mg2+ > 0)."
    }
   },
   "oracleIntermediates": {
    "primerInExcess": {
     "deltaH_kcal_per_mol": -148.79999999999623,
     "deltaS_cal_per_K_mol": -411.19999999998885,
     "tmWithoutSaltCorrection_C": 63.95462611136554
    },
    "equalStrands": {
     "deltaH_kcal_per_mol": -148.80000000000044,
     "deltaS_cal_per_K_mol": -411.20000000000124,
     "tmWithoutSaltCorrection_C": 61.863991910319044
    },
    "saltCorrection": 0.0,
    "saltCorrectionApplies": "1/Tm(K) += corr",
    "derivation": "dH and dS recovered from two Biopython Tm_NN evaluations with saltcorr=0 at concentration terms k and 10k; they include initiation and, in equalStrands for a self-complementary oligo, the symmetry term."
   },
   "method": {
    "nn": "santalucia-1998",
    "nnTable": "Biopython DNA_NN3",
    "salt": "owczarzy-2004",
    "saltText": "Owczarzy et al. 2004: 1/Tm = 1/Tm(1 M) + (4.29 fGC - 3.95) 1e-5 ln[Na+] + 9.40e-6 ln^2[Na+]",
    "concentration": "primerInExcess by default; equalStrands as the named alternative"
   },
   "oracle": "Biopython Bio.SeqUtils.MeltingTemp.Tm_NN",
   "oracleVersion": "1.88",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (oligo-tm)",
   "call": {
    "primerInExcess": "Bio.SeqUtils.MeltingTemp.Tm_NN('TAATACGACTCACTATAGGG', check=True, strict=True, nn_table=DNA_NN3, dnac1=250, dnac2=0, selfcomp=False, Na=1000, K=0, Tris=0, Mg=0, dNTPs=0, saltcorr=6)",
    "equalStrands": "Bio.SeqUtils.MeltingTemp.Tm_NN('TAATACGACTCACTATAGGG', check=True, strict=True, nn_table=DNA_NN3, dnac1=125.0, dnac2=125.0, selfcomp=False, Na=1000, K=0, Tris=0, Mg=0, dNTPs=0, saltcorr=6)"
   },
   "notes": "as T04 at 1 M Na+"
  },
  {
   "id": "T07",
   "input": {
    "sequence": "ATTTAGGTGACACTATAG",
    "name": "SP6",
    "length": 18,
    "gcPercent": 33.333333333333336,
    "selfComplementary": false,
    "oligoConcentration_nM": 500,
    "Na_mM": 50,
    "K_mM": 0,
    "Tris_mM": 0,
    "Mg_mM": 0,
    "dNTPs_mM": 0,
    "complement": "perfect complement (c_seq=None), no dangling ends, no mismatches"
   },
   "expected": {
    "defaultModel": "primerInExcess",
    "primerInExcess": {
     "tm_C": 42.76523492809997,
     "concentrationTerm_nM": 500.0,
     "dnac1_nM": 500,
     "dnac2_nM": 0,
     "symmetryTerm": false
    },
    "equalStrands": {
     "tm_C": 40.68367174972849,
     "concentrationTerm_nM": 125.0,
     "dnac1_nM": 250.0,
     "dnac2_nM": 250.0,
     "symmetryTerm": false,
     "x": 4
    },
    "saltRegime": {
     "R": 0.0,
     "freeMg_mM": 0,
     "regimeId": null,
     "regime": "no Mg2+: Owczarzy 2008 not applied (R = 0)",
     "nearBoundary": false,
     "appliedCorrection": "owczarzy-2004",
     "note": "R, the regime and nearBoundary use free Mg2+; the regime decides the Tm where Owczarzy 2008 is applied (Mg2+ > 0)."
    }
   },
   "oracleIntermediates": {
    "primerInExcess": {
     "deltaH_kcal_per_mol": -131.20000000000007,
     "deltaS_cal_per_K_mol": -365.5000000000001,
     "tmWithoutSaltCorrection_C": 59.56734729508696
    },
    "equalStrands": {
     "deltaH_kcal_per_mol": -131.19999999999845,
     "deltaS_cal_per_K_mol": -365.4999999999952,
     "tmWithoutSaltCorrection_C": 57.25928684508733
    },
    "saltCorrection": 0.00015985192472880245,
    "saltCorrectionApplies": "1/Tm(K) += corr",
    "derivation": "dH and dS recovered from two Biopython Tm_NN evaluations with saltcorr=0 at concentration terms k and 10k; they include initiation and, in equalStrands for a self-complementary oligo, the symmetry term."
   },
   "method": {
    "nn": "santalucia-1998",
    "nnTable": "Biopython DNA_NN3",
    "salt": "owczarzy-2004",
    "saltText": "Owczarzy et al. 2004: 1/Tm = 1/Tm(1 M) + (4.29 fGC - 3.95) 1e-5 ln[Na+] + 9.40e-6 ln^2[Na+]",
    "concentration": "primerInExcess by default; equalStrands as the named alternative"
   },
   "oracle": "Biopython Bio.SeqUtils.MeltingTemp.Tm_NN",
   "oracleVersion": "1.88",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (oligo-tm)",
   "call": {
    "primerInExcess": "Bio.SeqUtils.MeltingTemp.Tm_NN('ATTTAGGTGACACTATAG', check=True, strict=True, nn_table=DNA_NN3, dnac1=500, dnac2=0, selfcomp=False, Na=50, K=0, Tris=0, Mg=0, dNTPs=0, saltcorr=6)",
    "equalStrands": "Bio.SeqUtils.MeltingTemp.Tm_NN('ATTTAGGTGACACTATAG', check=True, strict=True, nn_table=DNA_NN3, dnac1=250.0, dnac2=250.0, selfcomp=False, Na=50, K=0, Tris=0, Mg=0, dNTPs=0, saltcorr=6)"
   },
   "notes": ""
  },
  {
   "id": "T08",
   "input": {
    "sequence": "CGGAACTGCAGTTCCG",
    "name": "sc16",
    "length": 16,
    "gcPercent": 62.5,
    "selfComplementary": true,
    "oligoConcentration_nM": 250,
    "Na_mM": 50,
    "K_mM": 0,
    "Tris_mM": 0,
    "Mg_mM": 0,
    "dNTPs_mM": 0,
    "complement": "perfect complement (c_seq=None), no dangling ends, no mismatches"
   },
   "expected": {
    "defaultModel": "primerInExcess",
    "primerInExcess": {
     "tm_C": 55.13965952971455,
     "concentrationTerm_nM": 250.0,
     "dnac1_nM": 250,
     "dnac2_nM": 0,
     "symmetryTerm": false
    },
    "equalStrands": {
     "tm_C": 53.96874378646828,
     "concentrationTerm_nM": 250,
     "dnac1_nM": 250,
     "dnac2_nM": 0,
     "symmetryTerm": true,
     "x": 1
    },
    "saltRegime": {
     "R": 0.0,
     "freeMg_mM": 0,
     "regimeId": null,
     "regime": "no Mg2+: Owczarzy 2008 not applied (R = 0)",
     "nearBoundary": false,
     "appliedCorrection": "owczarzy-2004",
     "note": "R, the regime and nearBoundary use free Mg2+; the regime decides the Tm where Owczarzy 2008 is applied (Mg2+ > 0)."
    }
   },
   "oracleIntermediates": {
    "primerInExcess": {
     "deltaH_kcal_per_mol": -128.39999999999907,
     "deltaS_cal_per_K_mol": -345.1999999999972,
     "tmWithoutSaltCorrection_C": 68.87970826364392
    },
    "equalStrands": {
     "deltaH_kcal_per_mol": -128.39999999999907,
     "deltaS_cal_per_K_mol": -346.5999999999972,
     "tmWithoutSaltCorrection_C": 67.60891743524786
    },
    "saltCorrection": 0.00012236782465595812,
    "saltCorrectionApplies": "1/Tm(K) += corr",
    "derivation": "dH and dS recovered from two Biopython Tm_NN evaluations with saltcorr=0 at concentration terms k and 10k; they include initiation and, in equalStrands for a self-complementary oligo, the symmetry term."
   },
   "method": {
    "nn": "santalucia-1998",
    "nnTable": "Biopython DNA_NN3",
    "salt": "owczarzy-2004",
    "saltText": "Owczarzy et al. 2004: 1/Tm = 1/Tm(1 M) + (4.29 fGC - 3.95) 1e-5 ln[Na+] + 9.40e-6 ln^2[Na+]",
    "concentration": "primerInExcess by default; equalStrands as the named alternative"
   },
   "oracle": "Biopython Bio.SeqUtils.MeltingTemp.Tm_NN",
   "oracleVersion": "1.88",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (oligo-tm)",
   "call": {
    "primerInExcess": "Bio.SeqUtils.MeltingTemp.Tm_NN('CGGAACTGCAGTTCCG', check=True, strict=True, nn_table=DNA_NN3, dnac1=250, dnac2=0, selfcomp=False, Na=50, K=0, Tris=0, Mg=0, dNTPs=0, saltcorr=6)",
    "equalStrands": "Bio.SeqUtils.MeltingTemp.Tm_NN('CGGAACTGCAGTTCCG', check=True, strict=True, nn_table=DNA_NN3, dnac1=250, dnac2=0, selfcomp=True, Na=50, K=0, Tris=0, Mg=0, dNTPs=0, saltcorr=6)"
   },
   "notes": "self-complementary"
  },
  {
   "id": "T09",
   "input": {
    "sequence": "TTAGCATAATTGCAATATTCAGTTAAGCTA",
    "name": "d30-at",
    "length": 30,
    "gcPercent": 26.666666666666668,
    "selfComplementary": false,
    "oligoConcentration_nM": 500,
    "Na_mM": 1000,
    "K_mM": 0,
    "Tris_mM": 0,
    "Mg_mM": 0,
    "dNTPs_mM": 0,
    "complement": "perfect complement (c_seq=None), no dangling ends, no mismatches"
   },
   "expected": {
    "defaultModel": "primerInExcess",
    "primerInExcess": {
     "tm_C": 72.04581524273675,
     "concentrationTerm_nM": 500.0,
     "dnac1_nM": 500,
     "dnac2_nM": 0,
     "symmetryTerm": false
    },
    "equalStrands": {
     "tm_C": 70.60398190342391,
     "concentrationTerm_nM": 125.0,
     "dnac1_nM": 250.0,
     "dnac2_nM": 250.0,
     "symmetryTerm": false,
     "x": 4
    },
    "saltRegime": {
     "R": 0.0,
     "freeMg_mM": 0,
     "regimeId": null,
     "regime": "no Mg2+: Owczarzy 2008 not applied (R = 0)",
     "nearBoundary": false,
     "appliedCorrection": "owczarzy-2004",
     "note": "R, the regime and nearBoundary use free Mg2+; the regime decides the Tm where Owczarzy 2008 is applied (Mg2+ > 0)."
    }
   },
   "oracleIntermediates": {
    "primerInExcess": {
     "deltaH_kcal_per_mol": -226.69999999999786,
     "deltaS_cal_per_K_mol": -627.8999999999934,
     "tmWithoutSaltCorrection_C": 72.04581524273675
    },
    "equalStrands": {
     "deltaH_kcal_per_mol": -226.70000000000272,
     "deltaS_cal_per_K_mol": -627.9000000000075,
     "tmWithoutSaltCorrection_C": 70.60398190342391
    },
    "saltCorrection": 0.0,
    "saltCorrectionApplies": "1/Tm(K) += corr",
    "derivation": "dH and dS recovered from two Biopython Tm_NN evaluations with saltcorr=0 at concentration terms k and 10k; they include initiation and, in equalStrands for a self-complementary oligo, the symmetry term."
   },
   "method": {
    "nn": "santalucia-1998",
    "nnTable": "Biopython DNA_NN3",
    "salt": "owczarzy-2004",
    "saltText": "Owczarzy et al. 2004: 1/Tm = 1/Tm(1 M) + (4.29 fGC - 3.95) 1e-5 ln[Na+] + 9.40e-6 ln^2[Na+]",
    "concentration": "primerInExcess by default; equalStrands as the named alternative"
   },
   "oracle": "Biopython Bio.SeqUtils.MeltingTemp.Tm_NN",
   "oracleVersion": "1.88",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (oligo-tm)",
   "call": {
    "primerInExcess": "Bio.SeqUtils.MeltingTemp.Tm_NN('TTAGCATAATTGCAATATTCAGTTAAGCTA', check=True, strict=True, nn_table=DNA_NN3, dnac1=500, dnac2=0, selfcomp=False, Na=1000, K=0, Tris=0, Mg=0, dNTPs=0, saltcorr=6)",
    "equalStrands": "Bio.SeqUtils.MeltingTemp.Tm_NN('TTAGCATAATTGCAATATTCAGTTAAGCTA', check=True, strict=True, nn_table=DNA_NN3, dnac1=250.0, dnac2=250.0, selfcomp=False, Na=1000, K=0, Tris=0, Mg=0, dNTPs=0, saltcorr=6)"
   },
   "notes": ""
  },
  {
   "id": "T10",
   "input": {
    "sequence": "GCCAGTCGGACTGCAGGCTGCCAAGTCCGTGGACA",
    "name": "d35",
    "length": 35,
    "gcPercent": 65.71428571428571,
    "selfComplementary": false,
    "oligoConcentration_nM": 250,
    "Na_mM": 50,
    "K_mM": 0,
    "Tris_mM": 0,
    "Mg_mM": 0,
    "dNTPs_mM": 0,
    "complement": "perfect complement (c_seq=None), no dangling ends, no mismatches"
   },
   "expected": {
    "defaultModel": "primerInExcess",
    "primerInExcess": {
     "tm_C": 76.597588901005,
     "concentrationTerm_nM": 250.0,
     "dnac1_nM": 250,
     "dnac2_nM": 0,
     "symmetryTerm": false
    },
    "equalStrands": {
     "tm_C": 75.42829426379137,
     "concentrationTerm_nM": 62.5,
     "dnac1_nM": 125.0,
     "dnac2_nM": 125.0,
     "symmetryTerm": false,
     "x": 4
    },
    "saltRegime": {
     "R": 0.0,
     "freeMg_mM": 0,
     "regimeId": null,
     "regime": "no Mg2+: Owczarzy 2008 not applied (R = 0)",
     "nearBoundary": false,
     "appliedCorrection": "owczarzy-2004",
     "note": "R, the regime and nearBoundary use free Mg2+; the regime decides the Tm where Owczarzy 2008 is applied (Mg2+ > 0)."
    }
   },
   "oracleIntermediates": {
    "primerInExcess": {
     "deltaH_kcal_per_mol": -287.19999999999135,
     "deltaS_cal_per_K_mol": -756.9999999999761,
     "tmWithoutSaltCorrection_C": 91.68462393726202
    },
    "equalStrands": {
     "deltaH_kcal_per_mol": -287.19999999999914,
     "deltaS_cal_per_K_mol": -756.9999999999975,
     "tmWithoutSaltCorrection_C": 90.41245740529206
    },
    "saltCorrection": 0.00011823692383160387,
    "saltCorrectionApplies": "1/Tm(K) += corr",
    "derivation": "dH and dS recovered from two Biopython Tm_NN evaluations with saltcorr=0 at concentration terms k and 10k; they include initiation and, in equalStrands for a self-complementary oligo, the symmetry term."
   },
   "method": {
    "nn": "santalucia-1998",
    "nnTable": "Biopython DNA_NN3",
    "salt": "owczarzy-2004",
    "saltText": "Owczarzy et al. 2004: 1/Tm = 1/Tm(1 M) + (4.29 fGC - 3.95) 1e-5 ln[Na+] + 9.40e-6 ln^2[Na+]",
    "concentration": "primerInExcess by default; equalStrands as the named alternative"
   },
   "oracle": "Biopython Bio.SeqUtils.MeltingTemp.Tm_NN",
   "oracleVersion": "1.88",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (oligo-tm)",
   "call": {
    "primerInExcess": "Bio.SeqUtils.MeltingTemp.Tm_NN('GCCAGTCGGACTGCAGGCTGCCAAGTCCGTGGACA', check=True, strict=True, nn_table=DNA_NN3, dnac1=250, dnac2=0, selfcomp=False, Na=50, K=0, Tris=0, Mg=0, dNTPs=0, saltcorr=6)",
    "equalStrands": "Bio.SeqUtils.MeltingTemp.Tm_NN('GCCAGTCGGACTGCAGGCTGCCAAGTCCGTGGACA', check=True, strict=True, nn_table=DNA_NN3, dnac1=125.0, dnac2=125.0, selfcomp=False, Na=50, K=0, Tris=0, Mg=0, dNTPs=0, saltcorr=6)"
   },
   "notes": ""
  },
  {
   "id": "T11",
   "input": {
    "sequence": "ATTATAAGTTACATTATTAACTATCAGTAATTTGATAGCA",
    "name": "d40-at",
    "length": 40,
    "gcPercent": 20.0,
    "selfComplementary": false,
    "oligoConcentration_nM": 250,
    "Na_mM": 50,
    "K_mM": 0,
    "Tris_mM": 0,
    "Mg_mM": 0,
    "dNTPs_mM": 0,
    "complement": "perfect complement (c_seq=None), no dangling ends, no mismatches"
   },
   "expected": {
    "defaultModel": "primerInExcess",
    "primerInExcess": {
     "tm_C": 51.964557940177656,
     "concentrationTerm_nM": 250.0,
     "dnac1_nM": 250,
     "dnac2_nM": 0,
     "symmetryTerm": false
    },
    "equalStrands": {
     "tm_C": 50.99531496348209,
     "concentrationTerm_nM": 62.5,
     "dnac1_nM": 125.0,
     "dnac2_nM": 125.0,
     "symmetryTerm": false,
     "x": 4
    },
    "saltRegime": {
     "R": 0.0,
     "freeMg_mM": 0,
     "regimeId": null,
     "regime": "no Mg2+: Owczarzy 2008 not applied (R = 0)",
     "nearBoundary": false,
     "appliedCorrection": "owczarzy-2004",
     "note": "R, the regime and nearBoundary use free Mg2+; the regime decides the Tm where Owczarzy 2008 is applied (Mg2+ > 0)."
    }
   },
   "oracleIntermediates": {
    "primerInExcess": {
     "deltaH_kcal_per_mol": -299.4999999999992,
     "deltaS_cal_per_K_mol": -837.9999999999977,
     "tmWithoutSaltCorrection_C": 71.81421897614905
    },
    "equalStrands": {
     "deltaH_kcal_per_mol": -299.5000000000077,
     "deltaS_cal_per_K_mol": -838.0000000000224,
     "tmWithoutSaltCorrection_C": 70.72320858058987
    },
    "saltCorrection": 0.00017698751333353126,
    "saltCorrectionApplies": "1/Tm(K) += corr",
    "derivation": "dH and dS recovered from two Biopython Tm_NN evaluations with saltcorr=0 at concentration terms k and 10k; they include initiation and, in equalStrands for a self-complementary oligo, the symmetry term."
   },
   "method": {
    "nn": "santalucia-1998",
    "nnTable": "Biopython DNA_NN3",
    "salt": "owczarzy-2004",
    "saltText": "Owczarzy et al. 2004: 1/Tm = 1/Tm(1 M) + (4.29 fGC - 3.95) 1e-5 ln[Na+] + 9.40e-6 ln^2[Na+]",
    "concentration": "primerInExcess by default; equalStrands as the named alternative"
   },
   "oracle": "Biopython Bio.SeqUtils.MeltingTemp.Tm_NN",
   "oracleVersion": "1.88",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (oligo-tm)",
   "call": {
    "primerInExcess": "Bio.SeqUtils.MeltingTemp.Tm_NN('ATTATAAGTTACATTATTAACTATCAGTAATTTGATAGCA', check=True, strict=True, nn_table=DNA_NN3, dnac1=250, dnac2=0, selfcomp=False, Na=50, K=0, Tris=0, Mg=0, dNTPs=0, saltcorr=6)",
    "equalStrands": "Bio.SeqUtils.MeltingTemp.Tm_NN('ATTATAAGTTACATTATTAACTATCAGTAATTTGATAGCA', check=True, strict=True, nn_table=DNA_NN3, dnac1=125.0, dnac2=125.0, selfcomp=False, Na=50, K=0, Tris=0, Mg=0, dNTPs=0, saltcorr=6)"
   },
   "notes": "40-mer, 20% GC"
  },
  {
   "id": "T12",
   "input": {
    "sequence": "GCGGCCGCATCCGGGCAGCGCCCAGAGCTCGCCGGTTGCG",
    "name": "d40-gc",
    "length": 40,
    "gcPercent": 80.0,
    "selfComplementary": false,
    "oligoConcentration_nM": 250,
    "Na_mM": 1000,
    "K_mM": 0,
    "Tris_mM": 0,
    "Mg_mM": 0,
    "dNTPs_mM": 0,
    "complement": "perfect complement (c_seq=None), no dangling ends, no mismatches"
   },
   "expected": {
    "defaultModel": "primerInExcess",
    "primerInExcess": {
     "tm_C": 99.9819298750503,
     "concentrationTerm_nM": 250.0,
     "dnac1_nM": 250,
     "dnac2_nM": 0,
     "symmetryTerm": false
    },
    "equalStrands": {
     "tm_C": 98.88155489603344,
     "concentrationTerm_nM": 62.5,
     "dnac1_nM": 125.0,
     "dnac2_nM": 125.0,
     "symmetryTerm": false,
     "x": 4
    },
    "saltRegime": {
     "R": 0.0,
     "freeMg_mM": 0,
     "regimeId": null,
     "regime": "no Mg2+: Owczarzy 2008 not applied (R = 0)",
     "nearBoundary": false,
     "appliedCorrection": "owczarzy-2004",
     "note": "R, the regime and nearBoundary use free Mg2+; the regime decides the Tm where Owczarzy 2008 is applied (Mg2+ > 0)."
    }
   },
   "oracleIntermediates": {
    "primerInExcess": {
     "deltaH_kcal_per_mol": -347.4999999999823,
     "deltaS_cal_per_K_mol": -901.0999999999523,
     "tmWithoutSaltCorrection_C": 99.9819298750503
    },
    "equalStrands": {
     "deltaH_kcal_per_mol": -347.49999999999375,
     "deltaS_cal_per_K_mol": -901.099999999983,
     "tmWithoutSaltCorrection_C": 98.88155489603344
    },
    "saltCorrection": 0.0,
    "saltCorrectionApplies": "1/Tm(K) += corr",
    "derivation": "dH and dS recovered from two Biopython Tm_NN evaluations with saltcorr=0 at concentration terms k and 10k; they include initiation and, in equalStrands for a self-complementary oligo, the symmetry term."
   },
   "method": {
    "nn": "santalucia-1998",
    "nnTable": "Biopython DNA_NN3",
    "salt": "owczarzy-2004",
    "saltText": "Owczarzy et al. 2004: 1/Tm = 1/Tm(1 M) + (4.29 fGC - 3.95) 1e-5 ln[Na+] + 9.40e-6 ln^2[Na+]",
    "concentration": "primerInExcess by default; equalStrands as the named alternative"
   },
   "oracle": "Biopython Bio.SeqUtils.MeltingTemp.Tm_NN",
   "oracleVersion": "1.88",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (oligo-tm)",
   "call": {
    "primerInExcess": "Bio.SeqUtils.MeltingTemp.Tm_NN('GCGGCCGCATCCGGGCAGCGCCCAGAGCTCGCCGGTTGCG', check=True, strict=True, nn_table=DNA_NN3, dnac1=250, dnac2=0, selfcomp=False, Na=1000, K=0, Tris=0, Mg=0, dNTPs=0, saltcorr=6)",
    "equalStrands": "Bio.SeqUtils.MeltingTemp.Tm_NN('GCGGCCGCATCCGGGCAGCGCCCAGAGCTCGCCGGTTGCG', check=True, strict=True, nn_table=DNA_NN3, dnac1=125.0, dnac2=125.0, selfcomp=False, Na=1000, K=0, Tris=0, Mg=0, dNTPs=0, saltcorr=6)"
   },
   "notes": "40-mer, 80% GC"
  },
  {
   "id": "T13",
   "input": {
    "sequence": "CGCAAATGGGCGGTAGGCGTG",
    "name": "CMV-forward",
    "length": 21,
    "gcPercent": 66.66666666666667,
    "selfComplementary": false,
    "oligoConcentration_nM": 250,
    "Na_mM": 50,
    "K_mM": 0,
    "Tris_mM": 0,
    "Mg_mM": 0,
    "dNTPs_mM": 0,
    "complement": "perfect complement (c_seq=None), no dangling ends, no mismatches"
   },
   "expected": {
    "defaultModel": "primerInExcess",
    "primerInExcess": {
     "tm_C": 66.33152650233001,
     "concentrationTerm_nM": 250.0,
     "dnac1_nM": 250,
     "dnac2_nM": 0,
     "symmetryTerm": false
    },
    "equalStrands": {
     "tm_C": 64.50952006812747,
     "concentrationTerm_nM": 62.5,
     "dnac1_nM": 125.0,
     "dnac2_nM": 125.0,
     "symmetryTerm": false,
     "x": 4
    },
    "saltRegime": {
     "R": 0.0,
     "freeMg_mM": 0,
     "regimeId": null,
     "regime": "no Mg2+: Owczarzy 2008 not applied (R = 0)",
     "nearBoundary": false,
     "appliedCorrection": "owczarzy-2004",
     "note": "R, the regime and nearBoundary use free Mg2+; the regime decides the Tm where Owczarzy 2008 is applied (Mg2+ > 0)."
    }
   },
   "oracleIntermediates": {
    "primerInExcess": {
     "deltaH_kcal_per_mol": -173.30000000000157,
     "deltaS_cal_per_K_mol": -460.0000000000043,
     "tmWithoutSaltCorrection_C": 80.37485448373104
    },
    "equalStrands": {
     "deltaH_kcal_per_mol": -173.29999999999873,
     "deltaS_cal_per_K_mol": -459.99999999999625,
     "tmWithoutSaltCorrection_C": 78.39942692780562
    },
    "saltCorrection": 0.00011701295321698038,
    "saltCorrectionApplies": "1/Tm(K) += corr",
    "derivation": "dH and dS recovered from two Biopython Tm_NN evaluations with saltcorr=0 at concentration terms k and 10k; they include initiation and, in equalStrands for a self-complementary oligo, the symmetry term."
   },
   "method": {
    "nn": "santalucia-1998",
    "nnTable": "Biopython DNA_NN3",
    "salt": "owczarzy-2004",
    "saltText": "Owczarzy et al. 2004: 1/Tm = 1/Tm(1 M) + (4.29 fGC - 3.95) 1e-5 ln[Na+] + 9.40e-6 ln^2[Na+]",
    "concentration": "primerInExcess by default; equalStrands as the named alternative"
   },
   "oracle": "Biopython Bio.SeqUtils.MeltingTemp.Tm_NN",
   "oracleVersion": "1.88",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (oligo-tm)",
   "call": {
    "primerInExcess": "Bio.SeqUtils.MeltingTemp.Tm_NN('CGCAAATGGGCGGTAGGCGTG', check=True, strict=True, nn_table=DNA_NN3, dnac1=250, dnac2=0, selfcomp=False, Na=50, K=0, Tris=0, Mg=0, dNTPs=0, saltcorr=6)",
    "equalStrands": "Bio.SeqUtils.MeltingTemp.Tm_NN('CGCAAATGGGCGGTAGGCGTG', check=True, strict=True, nn_table=DNA_NN3, dnac1=125.0, dnac2=125.0, selfcomp=False, Na=50, K=0, Tris=0, Mg=0, dNTPs=0, saltcorr=6)"
   },
   "notes": ""
  },
  {
   "id": "T14",
   "input": {
    "sequence": "GCTAGTTATTGCTCAGCGG",
    "name": "T7-terminator",
    "length": 19,
    "gcPercent": 52.63157894736842,
    "selfComplementary": false,
    "oligoConcentration_nM": 250,
    "Na_mM": 50,
    "K_mM": 0,
    "Tris_mM": 0,
    "Mg_mM": 0,
    "dNTPs_mM": 0,
    "complement": "perfect complement (c_seq=None), no dangling ends, no mismatches"
   },
   "expected": {
    "defaultModel": "primerInExcess",
    "primerInExcess": {
     "tm_C": 54.530088236443646,
     "concentrationTerm_nM": 250.0,
     "dnac1_nM": 250,
     "dnac2_nM": 0,
     "symmetryTerm": false
    },
    "equalStrands": {
     "tm_C": 52.57008559378039,
     "concentrationTerm_nM": 62.5,
     "dnac1_nM": 125.0,
     "dnac2_nM": 125.0,
     "symmetryTerm": false,
     "x": 4
    },
    "saltRegime": {
     "R": 0.0,
     "freeMg_mM": 0,
     "regimeId": null,
     "regime": "no Mg2+: Owczarzy 2008 not applied (R = 0)",
     "nearBoundary": false,
     "appliedCorrection": "owczarzy-2004",
     "note": "R, the regime and nearBoundary use free Mg2+; the regime decides the Tm where Owczarzy 2008 is applied (Mg2+ > 0)."
    }
   },
   "oracleIntermediates": {
    "primerInExcess": {
     "deltaH_kcal_per_mol": -150.00000000000028,
     "deltaS_cal_per_K_mol": -407.30000000000075,
     "tmWithoutSaltCorrection_C": 69.70245155868042
    },
    "equalStrands": {
     "deltaH_kcal_per_mol": -149.99999999999815,
     "deltaS_cal_per_K_mol": -407.29999999999455,
     "tmWithoutSaltCorrection_C": 67.55733543118265
    },
    "saltCorrection": 0.00013505041490616862,
    "saltCorrectionApplies": "1/Tm(K) += corr",
    "derivation": "dH and dS recovered from two Biopython Tm_NN evaluations with saltcorr=0 at concentration terms k and 10k; they include initiation and, in equalStrands for a self-complementary oligo, the symmetry term."
   },
   "method": {
    "nn": "santalucia-1998",
    "nnTable": "Biopython DNA_NN3",
    "salt": "owczarzy-2004",
    "saltText": "Owczarzy et al. 2004: 1/Tm = 1/Tm(1 M) + (4.29 fGC - 3.95) 1e-5 ln[Na+] + 9.40e-6 ln^2[Na+]",
    "concentration": "primerInExcess by default; equalStrands as the named alternative"
   },
   "oracle": "Biopython Bio.SeqUtils.MeltingTemp.Tm_NN",
   "oracleVersion": "1.88",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (oligo-tm)",
   "call": {
    "primerInExcess": "Bio.SeqUtils.MeltingTemp.Tm_NN('GCTAGTTATTGCTCAGCGG', check=True, strict=True, nn_table=DNA_NN3, dnac1=250, dnac2=0, selfcomp=False, Na=50, K=0, Tris=0, Mg=0, dNTPs=0, saltcorr=6)",
    "equalStrands": "Bio.SeqUtils.MeltingTemp.Tm_NN('GCTAGTTATTGCTCAGCGG', check=True, strict=True, nn_table=DNA_NN3, dnac1=125.0, dnac2=125.0, selfcomp=False, Na=50, K=0, Tris=0, Mg=0, dNTPs=0, saltcorr=6)"
   },
   "notes": ""
  },
  {
   "id": "T15",
   "input": {
    "sequence": "CGTCGCCGTCCAGCTCGACCAG",
    "name": "EGFP-N",
    "length": 22,
    "gcPercent": 72.72727272727273,
    "selfComplementary": false,
    "oligoConcentration_nM": 500,
    "Na_mM": 50,
    "K_mM": 0,
    "Tris_mM": 0,
    "Mg_mM": 0,
    "dNTPs_mM": 0,
    "complement": "perfect complement (c_seq=None), no dangling ends, no mismatches"
   },
   "expected": {
    "defaultModel": "primerInExcess",
    "primerInExcess": {
     "tm_C": 70.34793013640655,
     "concentrationTerm_nM": 500.0,
     "dnac1_nM": 500,
     "dnac2_nM": 0,
     "symmetryTerm": false
    },
    "equalStrands": {
     "tm_C": 68.59248687142656,
     "concentrationTerm_nM": 125.0,
     "dnac1_nM": 250.0,
     "dnac2_nM": 250.0,
     "symmetryTerm": false,
     "x": 4
    },
    "saltRegime": {
     "R": 0.0,
     "freeMg_mM": 0,
     "regimeId": null,
     "regime": "no Mg2+: Owczarzy 2008 not applied (R = 0)",
     "nearBoundary": false,
     "appliedCorrection": "owczarzy-2004",
     "note": "R, the regime and nearBoundary use free Mg2+; the regime decides the Tm where Owczarzy 2008 is applied (Mg2+ > 0)."
    }
   },
   "oracleIntermediates": {
    "primerInExcess": {
     "deltaH_kcal_per_mol": -184.19999999999703,
     "deltaS_cal_per_K_mol": -487.2999999999916,
     "tmWithoutSaltCorrection_C": 83.73772772292415
    },
    "equalStrands": {
     "deltaH_kcal_per_mol": -184.20000000000346,
     "deltaS_cal_per_K_mol": -487.3000000000096,
     "tmWithoutSaltCorrection_C": 81.84313759565111
    },
    "saltCorrection": 0.00010922404930573999,
    "saltCorrectionApplies": "1/Tm(K) += corr",
    "derivation": "dH and dS recovered from two Biopython Tm_NN evaluations with saltcorr=0 at concentration terms k and 10k; they include initiation and, in equalStrands for a self-complementary oligo, the symmetry term."
   },
   "method": {
    "nn": "santalucia-1998",
    "nnTable": "Biopython DNA_NN3",
    "salt": "owczarzy-2004",
    "saltText": "Owczarzy et al. 2004: 1/Tm = 1/Tm(1 M) + (4.29 fGC - 3.95) 1e-5 ln[Na+] + 9.40e-6 ln^2[Na+]",
    "concentration": "primerInExcess by default; equalStrands as the named alternative"
   },
   "oracle": "Biopython Bio.SeqUtils.MeltingTemp.Tm_NN",
   "oracleVersion": "1.88",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (oligo-tm)",
   "call": {
    "primerInExcess": "Bio.SeqUtils.MeltingTemp.Tm_NN('CGTCGCCGTCCAGCTCGACCAG', check=True, strict=True, nn_table=DNA_NN3, dnac1=500, dnac2=0, selfcomp=False, Na=50, K=0, Tris=0, Mg=0, dNTPs=0, saltcorr=6)",
    "equalStrands": "Bio.SeqUtils.MeltingTemp.Tm_NN('CGTCGCCGTCCAGCTCGACCAG', check=True, strict=True, nn_table=DNA_NN3, dnac1=250.0, dnac2=250.0, selfcomp=False, Na=50, K=0, Tris=0, Mg=0, dNTPs=0, saltcorr=6)"
   },
   "notes": ""
  },
  {
   "id": "T16",
   "input": {
    "sequence": "GCTAGTTATTGCTCAGCGG",
    "name": "T7-terminator",
    "length": 19,
    "gcPercent": 52.63157894736842,
    "selfComplementary": false,
    "oligoConcentration_nM": 500,
    "Na_mM": 1000,
    "K_mM": 0,
    "Tris_mM": 0,
    "Mg_mM": 0,
    "dNTPs_mM": 0,
    "complement": "perfect complement (c_seq=None), no dangling ends, no mismatches"
   },
   "expected": {
    "defaultModel": "primerInExcess",
    "primerInExcess": {
     "tm_C": 70.78517095639836,
     "concentrationTerm_nM": 500.0,
     "dnac1_nM": 500,
     "dnac2_nM": 0,
     "symmetryTerm": false
    },
    "equalStrands": {
     "tm_C": 68.62652764216483,
     "concentrationTerm_nM": 125.0,
     "dnac1_nM": 250.0,
     "dnac2_nM": 250.0,
     "symmetryTerm": false,
     "x": 4
    },
    "saltRegime": {
     "R": 0.0,
     "freeMg_mM": 0,
     "regimeId": null,
     "regime": "no Mg2+: Owczarzy 2008 not applied (R = 0)",
     "nearBoundary": false,
     "appliedCorrection": "owczarzy-2004",
     "note": "R, the regime and nearBoundary use free Mg2+; the regime decides the Tm where Owczarzy 2008 is applied (Mg2+ > 0)."
    }
   },
   "oracleIntermediates": {
    "primerInExcess": {
     "deltaH_kcal_per_mol": -150.00000000000028,
     "deltaS_cal_per_K_mol": -407.30000000000075,
     "tmWithoutSaltCorrection_C": 70.78517095639836
    },
    "equalStrands": {
     "deltaH_kcal_per_mol": -149.99999999999815,
     "deltaS_cal_per_K_mol": -407.29999999999455,
     "tmWithoutSaltCorrection_C": 68.62652764216483
    },
    "saltCorrection": 0.0,
    "saltCorrectionApplies": "1/Tm(K) += corr",
    "derivation": "dH and dS recovered from two Biopython Tm_NN evaluations with saltcorr=0 at concentration terms k and 10k; they include initiation and, in equalStrands for a self-complementary oligo, the symmetry term."
   },
   "method": {
    "nn": "santalucia-1998",
    "nnTable": "Biopython DNA_NN3",
    "salt": "owczarzy-2004",
    "saltText": "Owczarzy et al. 2004: 1/Tm = 1/Tm(1 M) + (4.29 fGC - 3.95) 1e-5 ln[Na+] + 9.40e-6 ln^2[Na+]",
    "concentration": "primerInExcess by default; equalStrands as the named alternative"
   },
   "oracle": "Biopython Bio.SeqUtils.MeltingTemp.Tm_NN",
   "oracleVersion": "1.88",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (oligo-tm)",
   "call": {
    "primerInExcess": "Bio.SeqUtils.MeltingTemp.Tm_NN('GCTAGTTATTGCTCAGCGG', check=True, strict=True, nn_table=DNA_NN3, dnac1=500, dnac2=0, selfcomp=False, Na=1000, K=0, Tris=0, Mg=0, dNTPs=0, saltcorr=6)",
    "equalStrands": "Bio.SeqUtils.MeltingTemp.Tm_NN('GCTAGTTATTGCTCAGCGG', check=True, strict=True, nn_table=DNA_NN3, dnac1=250.0, dnac2=250.0, selfcomp=False, Na=1000, K=0, Tris=0, Mg=0, dNTPs=0, saltcorr=6)"
   },
   "notes": ""
  },
  {
   "id": "T17",
   "input": {
    "sequence": "ATTAGCATATGCTAAT",
    "name": "sc16-at",
    "length": 16,
    "gcPercent": 25.0,
    "selfComplementary": true,
    "oligoConcentration_nM": 250,
    "Na_mM": 50,
    "K_mM": 0,
    "Tris_mM": 0,
    "Mg_mM": 0,
    "dNTPs_mM": 0,
    "complement": "perfect complement (c_seq=None), no dangling ends, no mismatches"
   },
   "expected": {
    "defaultModel": "primerInExcess",
    "primerInExcess": {
     "tm_C": 36.4964635016525,
     "concentrationTerm_nM": 250.0,
     "dnac1_nM": 250,
     "dnac2_nM": 0,
     "symmetryTerm": false
    },
    "equalStrands": {
     "tm_C": 35.3213852682984,
     "concentrationTerm_nM": 250,
     "dnac1_nM": 250,
     "dnac2_nM": 0,
     "symmetryTerm": true,
     "x": 1
    },
    "saltRegime": {
     "R": 0.0,
     "freeMg_mM": 0,
     "regimeId": null,
     "regime": "no Mg2+: Owczarzy 2008 not applied (R = 0)",
     "nearBoundary": false,
     "appliedCorrection": "owczarzy-2004",
     "note": "R, the regime and nearBoundary use free Mg2+; the regime decides the Tm where Owczarzy 2008 is applied (Mg2+ > 0)."
    }
   },
   "oracleIntermediates": {
    "primerInExcess": {
     "deltaH_kcal_per_mol": -113.80000000000037,
     "deltaS_cal_per_K_mol": -317.90000000000106,
     "tmWithoutSaltCorrection_C": 53.76193043047232
    },
    "equalStrands": {
     "deltaH_kcal_per_mol": -113.79999999999913,
     "deltaS_cal_per_K_mol": -319.2999999999972,
     "tmWithoutSaltCorrection_C": 52.45243439765585
    },
    "saltCorrection": 0.00017056166760675797,
    "saltCorrectionApplies": "1/Tm(K) += corr",
    "derivation": "dH and dS recovered from two Biopython Tm_NN evaluations with saltcorr=0 at concentration terms k and 10k; they include initiation and, in equalStrands for a self-complementary oligo, the symmetry term."
   },
   "method": {
    "nn": "santalucia-1998",
    "nnTable": "Biopython DNA_NN3",
    "salt": "owczarzy-2004",
    "saltText": "Owczarzy et al. 2004: 1/Tm = 1/Tm(1 M) + (4.29 fGC - 3.95) 1e-5 ln[Na+] + 9.40e-6 ln^2[Na+]",
    "concentration": "primerInExcess by default; equalStrands as the named alternative"
   },
   "oracle": "Biopython Bio.SeqUtils.MeltingTemp.Tm_NN",
   "oracleVersion": "1.88",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (oligo-tm)",
   "call": {
    "primerInExcess": "Bio.SeqUtils.MeltingTemp.Tm_NN('ATTAGCATATGCTAAT', check=True, strict=True, nn_table=DNA_NN3, dnac1=250, dnac2=0, selfcomp=False, Na=50, K=0, Tris=0, Mg=0, dNTPs=0, saltcorr=6)",
    "equalStrands": "Bio.SeqUtils.MeltingTemp.Tm_NN('ATTAGCATATGCTAAT', check=True, strict=True, nn_table=DNA_NN3, dnac1=250, dnac2=0, selfcomp=True, Na=50, K=0, Tris=0, Mg=0, dNTPs=0, saltcorr=6)"
   },
   "notes": "self-complementary, 25% GC"
  },
  {
   "id": "T18",
   "input": {
    "sequence": "GCACACGGTGCCGGCACCGTGTGC",
    "name": "sc24",
    "length": 24,
    "gcPercent": 75.0,
    "selfComplementary": true,
    "oligoConcentration_nM": 500,
    "Na_mM": 1000,
    "K_mM": 0,
    "Tris_mM": 0,
    "Mg_mM": 0,
    "dNTPs_mM": 0,
    "complement": "perfect complement (c_seq=None), no dangling ends, no mismatches"
   },
   "expected": {
    "defaultModel": "primerInExcess",
    "primerInExcess": {
     "tm_C": 89.01673422289105,
     "concentrationTerm_nM": 500.0,
     "dnac1_nM": 500,
     "dnac2_nM": 0,
     "symmetryTerm": false
    },
    "equalStrands": {
     "tm_C": 88.11969303356909,
     "concentrationTerm_nM": 500,
     "dnac1_nM": 500,
     "dnac2_nM": 0,
     "symmetryTerm": true,
     "x": 1
    },
    "saltRegime": {
     "R": 0.0,
     "freeMg_mM": 0,
     "regimeId": null,
     "regime": "no Mg2+: Owczarzy 2008 not applied (R = 0)",
     "nearBoundary": false,
     "appliedCorrection": "owczarzy-2004",
     "note": "R, the regime and nearBoundary use free Mg2+; the regime decides the Tm where Owczarzy 2008 is applied (Mg2+ > 0)."
    }
   },
   "oracleIntermediates": {
    "primerInExcess": {
     "deltaH_kcal_per_mol": -204.20000000000783,
     "deltaS_cal_per_K_mol": -535.0000000000213,
     "tmWithoutSaltCorrection_C": 89.01673422289105
    },
    "equalStrands": {
     "deltaH_kcal_per_mol": -204.20000000000388,
     "deltaS_cal_per_K_mol": -536.4000000000103,
     "tmWithoutSaltCorrection_C": 88.11969303356909
    },
    "saltCorrection": 0.0,
    "saltCorrectionApplies": "1/Tm(K) += corr",
    "derivation": "dH and dS recovered from two Biopython Tm_NN evaluations with saltcorr=0 at concentration terms k and 10k; they include initiation and, in equalStrands for a self-complementary oligo, the symmetry term."
   },
   "method": {
    "nn": "santalucia-1998",
    "nnTable": "Biopython DNA_NN3",
    "salt": "owczarzy-2004",
    "saltText": "Owczarzy et al. 2004: 1/Tm = 1/Tm(1 M) + (4.29 fGC - 3.95) 1e-5 ln[Na+] + 9.40e-6 ln^2[Na+]",
    "concentration": "primerInExcess by default; equalStrands as the named alternative"
   },
   "oracle": "Biopython Bio.SeqUtils.MeltingTemp.Tm_NN",
   "oracleVersion": "1.88",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (oligo-tm)",
   "call": {
    "primerInExcess": "Bio.SeqUtils.MeltingTemp.Tm_NN('GCACACGGTGCCGGCACCGTGTGC', check=True, strict=True, nn_table=DNA_NN3, dnac1=500, dnac2=0, selfcomp=False, Na=1000, K=0, Tris=0, Mg=0, dNTPs=0, saltcorr=6)",
    "equalStrands": "Bio.SeqUtils.MeltingTemp.Tm_NN('GCACACGGTGCCGGCACCGTGTGC', check=True, strict=True, nn_table=DNA_NN3, dnac1=500, dnac2=0, selfcomp=True, Na=1000, K=0, Tris=0, Mg=0, dNTPs=0, saltcorr=6)"
   },
   "notes": "self-complementary, 75% GC"
  },
  {
   "id": "T19",
   "input": {
    "sequence": "TAATACGACTCACTATAGGG",
    "name": "T7-promoter",
    "length": 20,
    "gcPercent": 40.0,
    "selfComplementary": false,
    "oligoConcentration_nM": 250,
    "Na_mM": 50,
    "K_mM": 0,
    "Tris_mM": 0,
    "Mg_mM": 0,
    "dNTPs_mM": 0,
    "complement": "perfect complement (c_seq=None), no dangling ends, no mismatches"
   },
   "expected": {
    "defaultModel": "primerInExcess",
    "primerInExcess": {
     "tm_C": 48.682614271718364,
     "concentrationTerm_nM": 250.0,
     "dnac1_nM": 250,
     "dnac2_nM": 0,
     "symmetryTerm": false
    },
    "equalStrands": {
     "tm_C": 46.77657972141202,
     "concentrationTerm_nM": 62.5,
     "dnac1_nM": 125.0,
     "dnac2_nM": 125.0,
     "symmetryTerm": false,
     "x": 4
    },
    "saltRegime": {
     "R": 0.0,
     "freeMg_mM": 0,
     "regimeId": null,
     "regime": "no Mg2+: Owczarzy 2008 not applied (R = 0)",
     "nearBoundary": false,
     "appliedCorrection": "santalucia-1998-entropy",
     "note": "R, the regime and nearBoundary use free Mg2+; the regime decides the Tm where Owczarzy 2008 is applied (Mg2+ > 0)."
    }
   },
   "oracleIntermediates": {
    "primerInExcess": {
     "deltaH_kcal_per_mol": -148.79999999999623,
     "deltaS_cal_per_K_mol": -411.19999999998885,
     "tmWithoutSaltCorrection_C": 63.95462611136554
    },
    "equalStrands": {
     "deltaH_kcal_per_mol": -148.80000000000044,
     "deltaS_cal_per_K_mol": -411.20000000000124,
     "tmWithoutSaltCorrection_C": 61.863991910319044
    },
    "saltCorrection": -20.946160056689504,
    "saltCorrectionApplies": "added to dS (cal/(K mol))",
    "derivation": "dH and dS recovered from two Biopython Tm_NN evaluations with saltcorr=0 at concentration terms k and 10k; they include initiation and, in equalStrands for a self-complementary oligo, the symmetry term."
   },
   "method": {
    "nn": "santalucia-1998",
    "nnTable": "Biopython DNA_NN3",
    "salt": "santalucia-1998-entropy",
    "saltText": "SantaLucia 1998 entropy correction: dS += 0.368 (N - 1) ln[Na+]",
    "concentration": "primerInExcess by default; equalStrands as the named alternative"
   },
   "oracle": "Biopython Bio.SeqUtils.MeltingTemp.Tm_NN",
   "oracleVersion": "1.88",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (oligo-tm)",
   "call": {
    "primerInExcess": "Bio.SeqUtils.MeltingTemp.Tm_NN('TAATACGACTCACTATAGGG', check=True, strict=True, nn_table=DNA_NN3, dnac1=250, dnac2=0, selfcomp=False, Na=50, K=0, Tris=0, Mg=0, dNTPs=0, saltcorr=5)",
    "equalStrands": "Bio.SeqUtils.MeltingTemp.Tm_NN('TAATACGACTCACTATAGGG', check=True, strict=True, nn_table=DNA_NN3, dnac1=125.0, dnac2=125.0, selfcomp=False, Na=50, K=0, Tris=0, Mg=0, dNTPs=0, saltcorr=5)"
   },
   "notes": "as T04 with the SantaLucia 1998 entropy correction"
  },
  {
   "id": "T20",
   "input": {
    "sequence": "TGCATCAGTCGAAGT",
    "name": "d15-mid",
    "length": 15,
    "gcPercent": 46.666666666666664,
    "selfComplementary": false,
    "oligoConcentration_nM": 500,
    "Na_mM": 50,
    "K_mM": 0,
    "Tris_mM": 0,
    "Mg_mM": 0,
    "dNTPs_mM": 0,
    "complement": "perfect complement (c_seq=None), no dangling ends, no mismatches"
   },
   "expected": {
    "defaultModel": "primerInExcess",
    "primerInExcess": {
     "tm_C": 49.226405943533166,
     "concentrationTerm_nM": 500.0,
     "dnac1_nM": 500,
     "dnac2_nM": 0,
     "symmetryTerm": false
    },
    "equalStrands": {
     "tm_C": 46.72157072233756,
     "concentrationTerm_nM": 125.0,
     "dnac1_nM": 250.0,
     "dnac2_nM": 250.0,
     "symmetryTerm": false,
     "x": 4
    },
    "saltRegime": {
     "R": 0.0,
     "freeMg_mM": 0,
     "regimeId": null,
     "regime": "no Mg2+: Owczarzy 2008 not applied (R = 0)",
     "nearBoundary": false,
     "appliedCorrection": "santalucia-1998-entropy",
     "note": "R, the regime and nearBoundary use free Mg2+; the regime decides the Tm where Owczarzy 2008 is applied (Mg2+ > 0)."
    }
   },
   "oracleIntermediates": {
    "primerInExcess": {
     "deltaH_kcal_per_mol": -113.3999999999996,
     "deltaS_cal_per_K_mol": -307.49999999999875,
     "tmWithoutSaltCorrection_C": 64.0201523339793
    },
    "equalStrands": {
     "deltaH_kcal_per_mol": -113.3999999999996,
     "deltaS_cal_per_K_mol": -307.4999999999987,
     "tmWithoutSaltCorrection_C": 61.28112678349231
    },
    "saltCorrection": -15.43401267335016,
    "saltCorrectionApplies": "added to dS (cal/(K mol))",
    "derivation": "dH and dS recovered from two Biopython Tm_NN evaluations with saltcorr=0 at concentration terms k and 10k; they include initiation and, in equalStrands for a self-complementary oligo, the symmetry term."
   },
   "method": {
    "nn": "santalucia-1998",
    "nnTable": "Biopython DNA_NN3",
    "salt": "santalucia-1998-entropy",
    "saltText": "SantaLucia 1998 entropy correction: dS += 0.368 (N - 1) ln[Na+]",
    "concentration": "primerInExcess by default; equalStrands as the named alternative"
   },
   "oracle": "Biopython Bio.SeqUtils.MeltingTemp.Tm_NN",
   "oracleVersion": "1.88",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (oligo-tm)",
   "call": {
    "primerInExcess": "Bio.SeqUtils.MeltingTemp.Tm_NN('TGCATCAGTCGAAGT', check=True, strict=True, nn_table=DNA_NN3, dnac1=500, dnac2=0, selfcomp=False, Na=50, K=0, Tris=0, Mg=0, dNTPs=0, saltcorr=5)",
    "equalStrands": "Bio.SeqUtils.MeltingTemp.Tm_NN('TGCATCAGTCGAAGT', check=True, strict=True, nn_table=DNA_NN3, dnac1=250.0, dnac2=250.0, selfcomp=False, Na=50, K=0, Tris=0, Mg=0, dNTPs=0, saltcorr=5)"
   },
   "notes": ""
  },
  {
   "id": "T21",
   "input": {
    "sequence": "GCATCGGTACCTGATTGCAAGTCAGGTCAT",
    "name": "d30",
    "length": 30,
    "gcPercent": 50.0,
    "selfComplementary": false,
    "oligoConcentration_nM": 250,
    "Na_mM": 1000,
    "K_mM": 0,
    "Tris_mM": 0,
    "Mg_mM": 0,
    "dNTPs_mM": 0,
    "complement": "perfect complement (c_seq=None), no dangling ends, no mismatches"
   },
   "expected": {
    "defaultModel": "primerInExcess",
    "primerInExcess": {
     "tm_C": 81.35288120324464,
     "concentrationTerm_nM": 250.0,
     "dnac1_nM": 250,
     "dnac2_nM": 0,
     "symmetryTerm": false
    },
    "equalStrands": {
     "tm_C": 79.89945177330497,
     "concentrationTerm_nM": 62.5,
     "dnac1_nM": 125.0,
     "dnac2_nM": 125.0,
     "symmetryTerm": false,
     "x": 4
    },
    "saltRegime": {
     "R": 0.0,
     "freeMg_mM": 0,
     "regimeId": null,
     "regime": "no Mg2+: Owczarzy 2008 not applied (R = 0)",
     "nearBoundary": false,
     "appliedCorrection": "santalucia-1998-entropy",
     "note": "R, the regime and nearBoundary use free Mg2+; the regime decides the Tm where Owczarzy 2008 is applied (Mg2+ > 0)."
    }
   },
   "oracleIntermediates": {
    "primerInExcess": {
     "deltaH_kcal_per_mol": -237.1999999999965,
     "deltaS_cal_per_K_mol": -638.89999999999,
     "tmWithoutSaltCorrection_C": 81.35288120324464
    },
    "equalStrands": {
     "deltaH_kcal_per_mol": -237.20000000000715,
     "deltaS_cal_per_K_mol": -638.9000000000202,
     "tmWithoutSaltCorrection_C": 79.89945177330497
    },
    "saltCorrection": 0.0,
    "saltCorrectionApplies": "added to dS (cal/(K mol))",
    "derivation": "dH and dS recovered from two Biopython Tm_NN evaluations with saltcorr=0 at concentration terms k and 10k; they include initiation and, in equalStrands for a self-complementary oligo, the symmetry term."
   },
   "method": {
    "nn": "santalucia-1998",
    "nnTable": "Biopython DNA_NN3",
    "salt": "santalucia-1998-entropy",
    "saltText": "SantaLucia 1998 entropy correction: dS += 0.368 (N - 1) ln[Na+]",
    "concentration": "primerInExcess by default; equalStrands as the named alternative"
   },
   "oracle": "Biopython Bio.SeqUtils.MeltingTemp.Tm_NN",
   "oracleVersion": "1.88",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (oligo-tm)",
   "call": {
    "primerInExcess": "Bio.SeqUtils.MeltingTemp.Tm_NN('GCATCGGTACCTGATTGCAAGTCAGGTCAT', check=True, strict=True, nn_table=DNA_NN3, dnac1=250, dnac2=0, selfcomp=False, Na=1000, K=0, Tris=0, Mg=0, dNTPs=0, saltcorr=5)",
    "equalStrands": "Bio.SeqUtils.MeltingTemp.Tm_NN('GCATCGGTACCTGATTGCAAGTCAGGTCAT', check=True, strict=True, nn_table=DNA_NN3, dnac1=125.0, dnac2=125.0, selfcomp=False, Na=1000, K=0, Tris=0, Mg=0, dNTPs=0, saltcorr=5)"
   },
   "notes": "1 M Na+: the entropy correction is zero (ln 1 = 0)"
  },
  {
   "id": "T22",
   "input": {
    "sequence": "ATGCGTACCATGAGTCAGTTGACCAGTACGCATTGCAAGT",
    "name": "d40-mid",
    "length": 40,
    "gcPercent": 47.5,
    "selfComplementary": false,
    "oligoConcentration_nM": 250,
    "Na_mM": 50,
    "K_mM": 0,
    "Tris_mM": 0,
    "Mg_mM": 0,
    "dNTPs_mM": 0,
    "complement": "perfect complement (c_seq=None), no dangling ends, no mismatches"
   },
   "expected": {
    "defaultModel": "primerInExcess",
    "primerInExcess": {
     "tm_C": 69.6824769853211,
     "concentrationTerm_nM": 250.0,
     "dnac1_nM": 250,
     "dnac2_nM": 0,
     "symmetryTerm": false
    },
    "equalStrands": {
     "tm_C": 68.6774754821663,
     "concentrationTerm_nM": 62.5,
     "dnac1_nM": 125.0,
     "dnac2_nM": 125.0,
     "symmetryTerm": false,
     "x": 4
    },
    "saltRegime": {
     "R": 0.0,
     "freeMg_mM": 0,
     "regimeId": null,
     "regime": "no Mg2+: Owczarzy 2008 not applied (R = 0)",
     "nearBoundary": false,
     "appliedCorrection": "santalucia-1998-entropy",
     "note": "R, the regime and nearBoundary use free Mg2+; the regime decides the Tm where Owczarzy 2008 is applied (Mg2+ > 0)."
    }
   },
   "oracleIntermediates": {
    "primerInExcess": {
     "deltaH_kcal_per_mol": -321.1999999999958,
     "deltaS_cal_per_K_mol": -863.6999999999883,
     "tmWithoutSaltCorrection_C": 86.1719028578409
    },
    "equalStrands": {
     "deltaH_kcal_per_mol": -321.20000000001534,
     "deltaS_cal_per_K_mol": -863.7000000000426,
     "tmWithoutSaltCorrection_C": 85.06805568306874
    },
    "saltCorrection": -42.99474959004688,
    "saltCorrectionApplies": "added to dS (cal/(K mol))",
    "derivation": "dH and dS recovered from two Biopython Tm_NN evaluations with saltcorr=0 at concentration terms k and 10k; they include initiation and, in equalStrands for a self-complementary oligo, the symmetry term."
   },
   "method": {
    "nn": "santalucia-1998",
    "nnTable": "Biopython DNA_NN3",
    "salt": "santalucia-1998-entropy",
    "saltText": "SantaLucia 1998 entropy correction: dS += 0.368 (N - 1) ln[Na+]",
    "concentration": "primerInExcess by default; equalStrands as the named alternative"
   },
   "oracle": "Biopython Bio.SeqUtils.MeltingTemp.Tm_NN",
   "oracleVersion": "1.88",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (oligo-tm)",
   "call": {
    "primerInExcess": "Bio.SeqUtils.MeltingTemp.Tm_NN('ATGCGTACCATGAGTCAGTTGACCAGTACGCATTGCAAGT', check=True, strict=True, nn_table=DNA_NN3, dnac1=250, dnac2=0, selfcomp=False, Na=50, K=0, Tris=0, Mg=0, dNTPs=0, saltcorr=5)",
    "equalStrands": "Bio.SeqUtils.MeltingTemp.Tm_NN('ATGCGTACCATGAGTCAGTTGACCAGTACGCATTGCAAGT', check=True, strict=True, nn_table=DNA_NN3, dnac1=125.0, dnac2=125.0, selfcomp=False, Na=50, K=0, Tris=0, Mg=0, dNTPs=0, saltcorr=5)"
   },
   "notes": ""
  },
  {
   "id": "T23",
   "input": {
    "sequence": "GACTGATCATGATCAGTC",
    "name": "sc18",
    "length": 18,
    "gcPercent": 44.44444444444444,
    "selfComplementary": true,
    "oligoConcentration_nM": 500,
    "Na_mM": 50,
    "K_mM": 0,
    "Tris_mM": 0,
    "Mg_mM": 0,
    "dNTPs_mM": 0,
    "complement": "perfect complement (c_seq=None), no dangling ends, no mismatches"
   },
   "expected": {
    "defaultModel": "primerInExcess",
    "primerInExcess": {
     "tm_C": 49.07404850177841,
     "concentrationTerm_nM": 500.0,
     "dnac1_nM": 500,
     "dnac2_nM": 0,
     "symmetryTerm": false
    },
    "equalStrands": {
     "tm_C": 48.016511254337615,
     "concentrationTerm_nM": 500,
     "dnac1_nM": 500,
     "dnac2_nM": 0,
     "symmetryTerm": true,
     "x": 1
    },
    "saltRegime": {
     "R": 0.0,
     "freeMg_mM": 0,
     "regimeId": null,
     "regime": "no Mg2+: Owczarzy 2008 not applied (R = 0)",
     "nearBoundary": false,
     "appliedCorrection": "santalucia-1998-entropy",
     "note": "R, the regime and nearBoundary use free Mg2+; the regime decides the Tm where Owczarzy 2008 is applied (Mg2+ > 0)."
    }
   },
   "oracleIntermediates": {
    "primerInExcess": {
     "deltaH_kcal_per_mol": -136.99999999999986,
     "deltaS_cal_per_K_mol": -377.5999999999995,
     "tmWithoutSaltCorrection_C": 63.93249199317313
    },
    "equalStrands": {
     "deltaH_kcal_per_mol": -136.99999999999986,
     "deltaS_cal_per_K_mol": -378.99999999999943,
     "tmWithoutSaltCorrection_C": 62.77535056245944
    },
    "saltCorrection": -18.741301103353766,
    "saltCorrectionApplies": "added to dS (cal/(K mol))",
    "derivation": "dH and dS recovered from two Biopython Tm_NN evaluations with saltcorr=0 at concentration terms k and 10k; they include initiation and, in equalStrands for a self-complementary oligo, the symmetry term."
   },
   "method": {
    "nn": "santalucia-1998",
    "nnTable": "Biopython DNA_NN3",
    "salt": "santalucia-1998-entropy",
    "saltText": "SantaLucia 1998 entropy correction: dS += 0.368 (N - 1) ln[Na+]",
    "concentration": "primerInExcess by default; equalStrands as the named alternative"
   },
   "oracle": "Biopython Bio.SeqUtils.MeltingTemp.Tm_NN",
   "oracleVersion": "1.88",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (oligo-tm)",
   "call": {
    "primerInExcess": "Bio.SeqUtils.MeltingTemp.Tm_NN('GACTGATCATGATCAGTC', check=True, strict=True, nn_table=DNA_NN3, dnac1=500, dnac2=0, selfcomp=False, Na=50, K=0, Tris=0, Mg=0, dNTPs=0, saltcorr=5)",
    "equalStrands": "Bio.SeqUtils.MeltingTemp.Tm_NN('GACTGATCATGATCAGTC', check=True, strict=True, nn_table=DNA_NN3, dnac1=500, dnac2=0, selfcomp=True, Na=50, K=0, Tris=0, Mg=0, dNTPs=0, saltcorr=5)"
   },
   "notes": "self-complementary"
  },
  {
   "id": "T24",
   "input": {
    "sequence": "GACCATGTTGCAAGTCCATCAGTG",
    "name": "d24",
    "length": 24,
    "gcPercent": 50.0,
    "selfComplementary": false,
    "oligoConcentration_nM": 250,
    "Na_mM": 50,
    "K_mM": 0,
    "Tris_mM": 0,
    "Mg_mM": 0,
    "dNTPs_mM": 0,
    "complement": "perfect complement (c_seq=None), no dangling ends, no mismatches"
   },
   "expected": {
    "defaultModel": "primerInExcess",
    "primerInExcess": {
     "tm_C": 59.97084513668284,
     "concentrationTerm_nM": 250.0,
     "dnac1_nM": 250,
     "dnac2_nM": 0,
     "symmetryTerm": false
    },
    "equalStrands": {
     "tm_C": 58.36218942133843,
     "concentrationTerm_nM": 62.5,
     "dnac1_nM": 125.0,
     "dnac2_nM": 125.0,
     "symmetryTerm": false,
     "x": 4
    },
    "saltRegime": {
     "R": 0.0,
     "freeMg_mM": 0,
     "regimeId": null,
     "regime": "no Mg2+: Owczarzy 2008 not applied (R = 0)",
     "nearBoundary": false,
     "appliedCorrection": "santalucia-1998-entropy",
     "note": "R, the regime and nearBoundary use free Mg2+; the regime decides the Tm where Owczarzy 2008 is applied (Mg2+ > 0)."
    }
   },
   "oracleIntermediates": {
    "primerInExcess": {
     "deltaH_kcal_per_mol": -189.0999999999971,
     "deltaS_cal_per_K_mol": -512.0999999999915,
     "tmWithoutSaltCorrection_C": 75.54613235195029
    },
    "equalStrands": {
     "deltaH_kcal_per_mol": -189.1000000000005,
     "deltaS_cal_per_K_mol": -512.1000000000013,
     "tmWithoutSaltCorrection_C": 73.78393030482118
    },
    "saltCorrection": -25.355877963360978,
    "saltCorrectionApplies": "added to dS (cal/(K mol))",
    "derivation": "dH and dS recovered from two Biopython Tm_NN evaluations with saltcorr=0 at concentration terms k and 10k; they include initiation and, in equalStrands for a self-complementary oligo, the symmetry term."
   },
   "method": {
    "nn": "santalucia-1998",
    "nnTable": "Biopython DNA_NN3",
    "salt": "santalucia-1998-entropy",
    "saltText": "SantaLucia 1998 entropy correction: dS += 0.368 (N - 1) ln[Na+]",
    "concentration": "primerInExcess by default; equalStrands as the named alternative"
   },
   "oracle": "Biopython Bio.SeqUtils.MeltingTemp.Tm_NN",
   "oracleVersion": "1.88",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (oligo-tm)",
   "call": {
    "primerInExcess": "Bio.SeqUtils.MeltingTemp.Tm_NN('GACCATGTTGCAAGTCCATCAGTG', check=True, strict=True, nn_table=DNA_NN3, dnac1=250, dnac2=0, selfcomp=False, Na=50, K=0, Tris=0, Mg=0, dNTPs=0, saltcorr=5)",
    "equalStrands": "Bio.SeqUtils.MeltingTemp.Tm_NN('GACCATGTTGCAAGTCCATCAGTG', check=True, strict=True, nn_table=DNA_NN3, dnac1=125.0, dnac2=125.0, selfcomp=False, Na=50, K=0, Tris=0, Mg=0, dNTPs=0, saltcorr=5)"
   },
   "notes": ""
  },
  {
   "id": "T25",
   "input": {
    "sequence": "TAATACGACTCACTATAGGG",
    "name": "T7-promoter",
    "length": 20,
    "gcPercent": 40.0,
    "selfComplementary": false,
    "oligoConcentration_nM": 250,
    "Na_mM": 50,
    "K_mM": 0,
    "Tris_mM": 0,
    "Mg_mM": 1.5,
    "dNTPs_mM": 0,
    "complement": "perfect complement (c_seq=None), no dangling ends, no mismatches"
   },
   "expected": {
    "defaultModel": "primerInExcess",
    "primerInExcess": {
     "tm_C": 54.846927606656664,
     "concentrationTerm_nM": 250.0,
     "dnac1_nM": 250,
     "dnac2_nM": 0,
     "symmetryTerm": false
    },
    "equalStrands": {
     "tm_C": 52.86740278631822,
     "concentrationTerm_nM": 62.5,
     "dnac1_nM": 125.0,
     "dnac2_nM": 125.0,
     "symmetryTerm": false,
     "x": 4
    },
    "saltRegime": {
     "R": 0.7745966692414833,
     "freeMg_mM": 1.5,
     "regimeId": "adjustedConstants",
     "regime": "0.22 <= R < 6: divalent formula with a, d and g adjusted for [Mon+]",
     "nearBoundary": false,
     "appliedCorrection": "owczarzy-2008",
     "note": "R, the regime and nearBoundary use free Mg2+; the regime decides the Tm where Owczarzy 2008 is applied (Mg2+ > 0).",
     "biopythonBranchVerified": true
    }
   },
   "oracleIntermediates": {
    "primerInExcess": {
     "deltaH_kcal_per_mol": -148.79999999999623,
     "deltaS_cal_per_K_mol": -411.19999999998885,
     "tmWithoutSaltCorrection_C": 63.95462611136554
    },
    "equalStrands": {
     "deltaH_kcal_per_mol": -148.80000000000044,
     "deltaS_cal_per_K_mol": -411.20000000000124,
     "tmWithoutSaltCorrection_C": 61.863991910319044
    },
    "saltCorrection": 8.237096568851266e-05,
    "saltCorrectionApplies": "1/Tm(K) += corr",
    "derivation": "dH and dS recovered from two Biopython Tm_NN evaluations with saltcorr=0 at concentration terms k and 10k; they include initiation and, in equalStrands for a self-complementary oligo, the symmetry term."
   },
   "method": {
    "nn": "santalucia-1998",
    "nnTable": "Biopython DNA_NN3",
    "salt": "owczarzy-2008",
    "saltText": "Owczarzy et al. 2008: Mg2+ and mixed-cation correction, regime by R = sqrt([Mg2+]) / [Mon+]",
    "concentration": "primerInExcess by default; equalStrands as the named alternative"
   },
   "oracle": "Biopython Bio.SeqUtils.MeltingTemp.Tm_NN",
   "oracleVersion": "1.88",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (oligo-tm)",
   "call": {
    "primerInExcess": "Bio.SeqUtils.MeltingTemp.Tm_NN('TAATACGACTCACTATAGGG', check=True, strict=True, nn_table=DNA_NN3, dnac1=250, dnac2=0, selfcomp=False, Na=50, K=0, Tris=0, Mg=1.5, dNTPs=0, saltcorr=7)",
    "equalStrands": "Bio.SeqUtils.MeltingTemp.Tm_NN('TAATACGACTCACTATAGGG', check=True, strict=True, nn_table=DNA_NN3, dnac1=125.0, dnac2=125.0, selfcomp=False, Na=50, K=0, Tris=0, Mg=1.5, dNTPs=0, saltcorr=7)"
   },
   "notes": "Owczarzy 2008, 0.22 <= R < 6"
  },
  {
   "id": "T26",
   "input": {
    "sequence": "TAATACGACTCACTATAGGG",
    "name": "T7-promoter",
    "length": 20,
    "gcPercent": 40.0,
    "selfComplementary": false,
    "oligoConcentration_nM": 250,
    "Na_mM": 50,
    "K_mM": 0,
    "Tris_mM": 0,
    "Mg_mM": 3.0,
    "dNTPs_mM": 0,
    "complement": "perfect complement (c_seq=None), no dangling ends, no mismatches"
   },
   "expected": {
    "defaultModel": "primerInExcess",
    "primerInExcess": {
     "tm_C": 56.22957147884671,
     "concentrationTerm_nM": 250.0,
     "dnac1_nM": 250,
     "dnac2_nM": 0,
     "symmetryTerm": false
    },
    "equalStrands": {
     "tm_C": 54.23337322212376,
     "concentrationTerm_nM": 62.5,
     "dnac1_nM": 125.0,
     "dnac2_nM": 125.0,
     "symmetryTerm": false,
     "x": 4
    },
    "saltRegime": {
     "R": 1.0954451150103321,
     "freeMg_mM": 3.0,
     "regimeId": "adjustedConstants",
     "regime": "0.22 <= R < 6: divalent formula with a, d and g adjusted for [Mon+]",
     "nearBoundary": false,
     "appliedCorrection": "owczarzy-2008",
     "note": "R, the regime and nearBoundary use free Mg2+; the regime decides the Tm where Owczarzy 2008 is applied (Mg2+ > 0).",
     "biopythonBranchVerified": true
    }
   },
   "oracleIntermediates": {
    "primerInExcess": {
     "deltaH_kcal_per_mol": -148.79999999999623,
     "deltaS_cal_per_K_mol": -411.19999999998885,
     "tmWithoutSaltCorrection_C": 63.95462611136554
    },
    "equalStrands": {
     "deltaH_kcal_per_mol": -148.80000000000044,
     "deltaS_cal_per_K_mol": -411.20000000000124,
     "tmWithoutSaltCorrection_C": 61.863991910319044
    },
    "saltCorrection": 6.957291289420883e-05,
    "saltCorrectionApplies": "1/Tm(K) += corr",
    "derivation": "dH and dS recovered from two Biopython Tm_NN evaluations with saltcorr=0 at concentration terms k and 10k; they include initiation and, in equalStrands for a self-complementary oligo, the symmetry term."
   },
   "method": {
    "nn": "santalucia-1998",
    "nnTable": "Biopython DNA_NN3",
    "salt": "owczarzy-2008",
    "saltText": "Owczarzy et al. 2008: Mg2+ and mixed-cation correction, regime by R = sqrt([Mg2+]) / [Mon+]",
    "concentration": "primerInExcess by default; equalStrands as the named alternative"
   },
   "oracle": "Biopython Bio.SeqUtils.MeltingTemp.Tm_NN",
   "oracleVersion": "1.88",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (oligo-tm)",
   "call": {
    "primerInExcess": "Bio.SeqUtils.MeltingTemp.Tm_NN('TAATACGACTCACTATAGGG', check=True, strict=True, nn_table=DNA_NN3, dnac1=250, dnac2=0, selfcomp=False, Na=50, K=0, Tris=0, Mg=3.0, dNTPs=0, saltcorr=7)",
    "equalStrands": "Bio.SeqUtils.MeltingTemp.Tm_NN('TAATACGACTCACTATAGGG', check=True, strict=True, nn_table=DNA_NN3, dnac1=125.0, dnac2=125.0, selfcomp=False, Na=50, K=0, Tris=0, Mg=3.0, dNTPs=0, saltcorr=7)"
   },
   "notes": "Owczarzy 2008, 0.22 <= R < 6"
  },
  {
   "id": "T27",
   "input": {
    "sequence": "CAGGAAACAGCTATGAC",
    "name": "M13R-27",
    "length": 17,
    "gcPercent": 47.05882352941177,
    "selfComplementary": false,
    "oligoConcentration_nM": 500,
    "Na_mM": 50,
    "K_mM": 0,
    "Tris_mM": 0,
    "Mg_mM": 2.0,
    "dNTPs_mM": 0,
    "complement": "perfect complement (c_seq=None), no dangling ends, no mismatches"
   },
   "expected": {
    "defaultModel": "primerInExcess",
    "primerInExcess": {
     "tm_C": 56.05375775853423,
     "concentrationTerm_nM": 500.0,
     "dnac1_nM": 500,
     "dnac2_nM": 0,
     "symmetryTerm": false
    },
    "equalStrands": {
     "tm_C": 53.771563941166505,
     "concentrationTerm_nM": 125.0,
     "dnac1_nM": 250.0,
     "dnac2_nM": 250.0,
     "symmetryTerm": false,
     "x": 4
    },
    "saltRegime": {
     "R": 0.8944271909999159,
     "freeMg_mM": 2.0,
     "regimeId": "adjustedConstants",
     "regime": "0.22 <= R < 6: divalent formula with a, d and g adjusted for [Mon+]",
     "nearBoundary": false,
     "appliedCorrection": "owczarzy-2008",
     "note": "R, the regime and nearBoundary use free Mg2+; the regime decides the Tm where Owczarzy 2008 is applied (Mg2+ > 0).",
     "biopythonBranchVerified": true
    }
   },
   "oracleIntermediates": {
    "primerInExcess": {
     "deltaH_kcal_per_mol": -129.8999999999988,
     "deltaS_cal_per_K_mol": -356.2999999999963,
     "tmWithoutSaltCorrection_C": 64.13984366249252
    },
    "equalStrands": {
     "deltaH_kcal_per_mol": -129.8999999999988,
     "deltaS_cal_per_K_mol": -356.2999999999964,
     "tmWithoutSaltCorrection_C": 61.74456778997882
    },
    "saltCorrection": 7.282329122466826e-05,
    "saltCorrectionApplies": "1/Tm(K) += corr",
    "derivation": "dH and dS recovered from two Biopython Tm_NN evaluations with saltcorr=0 at concentration terms k and 10k; they include initiation and, in equalStrands for a self-complementary oligo, the symmetry term."
   },
   "method": {
    "nn": "santalucia-1998",
    "nnTable": "Biopython DNA_NN3",
    "salt": "owczarzy-2008",
    "saltText": "Owczarzy et al. 2008: Mg2+ and mixed-cation correction, regime by R = sqrt([Mg2+]) / [Mon+]",
    "concentration": "primerInExcess by default; equalStrands as the named alternative"
   },
   "oracle": "Biopython Bio.SeqUtils.MeltingTemp.Tm_NN",
   "oracleVersion": "1.88",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (oligo-tm)",
   "call": {
    "primerInExcess": "Bio.SeqUtils.MeltingTemp.Tm_NN('CAGGAAACAGCTATGAC', check=True, strict=True, nn_table=DNA_NN3, dnac1=500, dnac2=0, selfcomp=False, Na=50, K=0, Tris=0, Mg=2.0, dNTPs=0, saltcorr=7)",
    "equalStrands": "Bio.SeqUtils.MeltingTemp.Tm_NN('CAGGAAACAGCTATGAC', check=True, strict=True, nn_table=DNA_NN3, dnac1=250.0, dnac2=250.0, selfcomp=False, Na=50, K=0, Tris=0, Mg=2.0, dNTPs=0, saltcorr=7)"
   },
   "notes": "Owczarzy 2008, 0.22 <= R < 6"
  },
  {
   "id": "T28",
   "input": {
    "sequence": "ATTAGTAAATTAGCT",
    "name": "d15-at",
    "length": 15,
    "gcPercent": 20.0,
    "selfComplementary": false,
    "oligoConcentration_nM": 250,
    "Na_mM": 50,
    "K_mM": 0,
    "Tris_mM": 0,
    "Mg_mM": 1.5,
    "dNTPs_mM": 0,
    "complement": "perfect complement (c_seq=None), no dangling ends, no mismatches"
   },
   "expected": {
    "defaultModel": "primerInExcess",
    "primerInExcess": {
     "tm_C": 39.09070419891674,
     "concentrationTerm_nM": 250.0,
     "dnac1_nM": 250,
     "dnac2_nM": 0,
     "symmetryTerm": false
    },
    "equalStrands": {
     "tm_C": 36.54420097523172,
     "concentrationTerm_nM": 62.5,
     "dnac1_nM": 125.0,
     "dnac2_nM": 125.0,
     "symmetryTerm": false,
     "x": 4
    },
    "saltRegime": {
     "R": 0.7745966692414833,
     "freeMg_mM": 1.5,
     "regimeId": "adjustedConstants",
     "regime": "0.22 <= R < 6: divalent formula with a, d and g adjusted for [Mon+]",
     "nearBoundary": false,
     "appliedCorrection": "owczarzy-2008",
     "note": "R, the regime and nearBoundary use free Mg2+; the regime decides the Tm where Owczarzy 2008 is applied (Mg2+ > 0).",
     "biopythonBranchVerified": true
    }
   },
   "oracleIntermediates": {
    "primerInExcess": {
     "deltaH_kcal_per_mol": -104.59999999999954,
     "deltaS_cal_per_K_mol": -295.09999999999854,
     "tmWithoutSaltCorrection_C": 48.39342182830893
    },
    "equalStrands": {
     "deltaH_kcal_per_mol": -104.60000000000056,
     "deltaS_cal_per_K_mol": -295.1000000000018,
     "tmWithoutSaltCorrection_C": 45.693576155244216
    },
    "saltCorrection": 9.265752423218516e-05,
    "saltCorrectionApplies": "1/Tm(K) += corr",
    "derivation": "dH and dS recovered from two Biopython Tm_NN evaluations with saltcorr=0 at concentration terms k and 10k; they include initiation and, in equalStrands for a self-complementary oligo, the symmetry term."
   },
   "method": {
    "nn": "santalucia-1998",
    "nnTable": "Biopython DNA_NN3",
    "salt": "owczarzy-2008",
    "saltText": "Owczarzy et al. 2008: Mg2+ and mixed-cation correction, regime by R = sqrt([Mg2+]) / [Mon+]",
    "concentration": "primerInExcess by default; equalStrands as the named alternative"
   },
   "oracle": "Biopython Bio.SeqUtils.MeltingTemp.Tm_NN",
   "oracleVersion": "1.88",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (oligo-tm)",
   "call": {
    "primerInExcess": "Bio.SeqUtils.MeltingTemp.Tm_NN('ATTAGTAAATTAGCT', check=True, strict=True, nn_table=DNA_NN3, dnac1=250, dnac2=0, selfcomp=False, Na=50, K=0, Tris=0, Mg=1.5, dNTPs=0, saltcorr=7)",
    "equalStrands": "Bio.SeqUtils.MeltingTemp.Tm_NN('ATTAGTAAATTAGCT', check=True, strict=True, nn_table=DNA_NN3, dnac1=125.0, dnac2=125.0, selfcomp=False, Na=50, K=0, Tris=0, Mg=1.5, dNTPs=0, saltcorr=7)"
   },
   "notes": "15-mer, 20% GC; 0.22 <= R < 6"
  },
  {
   "id": "T29",
   "input": {
    "sequence": "ACGTTGACCAGGTATCAGCATTGCA",
    "name": "d25",
    "length": 25,
    "gcPercent": 48.0,
    "selfComplementary": false,
    "oligoConcentration_nM": 500,
    "Na_mM": 50,
    "K_mM": 0,
    "Tris_mM": 0,
    "Mg_mM": 2.5,
    "dNTPs_mM": 0,
    "complement": "perfect complement (c_seq=None), no dangling ends, no mismatches"
   },
   "expected": {
    "defaultModel": "primerInExcess",
    "primerInExcess": {
     "tm_C": 70.597606435486,
     "concentrationTerm_nM": 500.0,
     "dnac1_nM": 500,
     "dnac2_nM": 0,
     "symmetryTerm": false
    },
    "equalStrands": {
     "tm_C": 68.94158274807586,
     "concentrationTerm_nM": 125.0,
     "dnac1_nM": 250.0,
     "dnac2_nM": 250.0,
     "symmetryTerm": false,
     "x": 4
    },
    "saltRegime": {
     "R": 1.0,
     "freeMg_mM": 2.5,
     "regimeId": "adjustedConstants",
     "regime": "0.22 <= R < 6: divalent formula with a, d and g adjusted for [Mon+]",
     "nearBoundary": false,
     "appliedCorrection": "owczarzy-2008",
     "note": "R, the regime and nearBoundary use free Mg2+; the regime decides the Tm where Owczarzy 2008 is applied (Mg2+ > 0).",
     "biopythonBranchVerified": true
    }
   },
   "oracleIntermediates": {
    "primerInExcess": {
     "deltaH_kcal_per_mol": -195.59999999999994,
     "deltaS_cal_per_K_mol": -526.2999999999995,
     "tmWithoutSaltCorrection_C": 79.20072329869487
    },
    "equalStrands": {
     "deltaH_kcal_per_mol": -195.5999999999963,
     "deltaS_cal_per_K_mol": -526.2999999999892,
     "tmWithoutSaltCorrection_C": 77.46098007547596
    },
    "saltCorrection": 7.102986220851876e-05,
    "saltCorrectionApplies": "1/Tm(K) += corr",
    "derivation": "dH and dS recovered from two Biopython Tm_NN evaluations with saltcorr=0 at concentration terms k and 10k; they include initiation and, in equalStrands for a self-complementary oligo, the symmetry term."
   },
   "method": {
    "nn": "santalucia-1998",
    "nnTable": "Biopython DNA_NN3",
    "salt": "owczarzy-2008",
    "saltText": "Owczarzy et al. 2008: Mg2+ and mixed-cation correction, regime by R = sqrt([Mg2+]) / [Mon+]",
    "concentration": "primerInExcess by default; equalStrands as the named alternative"
   },
   "oracle": "Biopython Bio.SeqUtils.MeltingTemp.Tm_NN",
   "oracleVersion": "1.88",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (oligo-tm)",
   "call": {
    "primerInExcess": "Bio.SeqUtils.MeltingTemp.Tm_NN('ACGTTGACCAGGTATCAGCATTGCA', check=True, strict=True, nn_table=DNA_NN3, dnac1=500, dnac2=0, selfcomp=False, Na=50, K=0, Tris=0, Mg=2.5, dNTPs=0, saltcorr=7)",
    "equalStrands": "Bio.SeqUtils.MeltingTemp.Tm_NN('ACGTTGACCAGGTATCAGCATTGCA', check=True, strict=True, nn_table=DNA_NN3, dnac1=250.0, dnac2=250.0, selfcomp=False, Na=50, K=0, Tris=0, Mg=2.5, dNTPs=0, saltcorr=7)"
   },
   "notes": "0.22 <= R < 6"
  },
  {
   "id": "T30",
   "input": {
    "sequence": "GCATCGGTACCTGATTGCAAGTCAGGTCAT",
    "name": "d30",
    "length": 30,
    "gcPercent": 50.0,
    "selfComplementary": false,
    "oligoConcentration_nM": 250,
    "Na_mM": 50,
    "K_mM": 0,
    "Tris_mM": 0,
    "Mg_mM": 3.0,
    "dNTPs_mM": 0,
    "complement": "perfect complement (c_seq=None), no dangling ends, no mismatches"
   },
   "expected": {
    "defaultModel": "primerInExcess",
    "primerInExcess": {
     "tm_C": 72.84275095929524,
     "concentrationTerm_nM": 250.0,
     "dnac1_nM": 250,
     "dnac2_nM": 0,
     "symmetryTerm": false
    },
    "equalStrands": {
     "tm_C": 71.45812918482812,
     "concentrationTerm_nM": 62.5,
     "dnac1_nM": 125.0,
     "dnac2_nM": 125.0,
     "symmetryTerm": false,
     "x": 4
    },
    "saltRegime": {
     "R": 1.0954451150103321,
     "freeMg_mM": 3.0,
     "regimeId": "adjustedConstants",
     "regime": "0.22 <= R < 6: divalent formula with a, d and g adjusted for [Mon+]",
     "nearBoundary": false,
     "appliedCorrection": "owczarzy-2008",
     "note": "R, the regime and nearBoundary use free Mg2+; the regime decides the Tm where Owczarzy 2008 is applied (Mg2+ > 0).",
     "biopythonBranchVerified": true
    }
   },
   "oracleIntermediates": {
    "primerInExcess": {
     "deltaH_kcal_per_mol": -237.1999999999965,
     "deltaS_cal_per_K_mol": -638.89999999999,
     "tmWithoutSaltCorrection_C": 81.35288120324464
    },
    "equalStrands": {
     "deltaH_kcal_per_mol": -237.20000000000715,
     "deltaS_cal_per_K_mol": -638.9000000000202,
     "tmWithoutSaltCorrection_C": 79.89945177330497
    },
    "saltCorrection": 6.938241907282133e-05,
    "saltCorrectionApplies": "1/Tm(K) += corr",
    "derivation": "dH and dS recovered from two Biopython Tm_NN evaluations with saltcorr=0 at concentration terms k and 10k; they include initiation and, in equalStrands for a self-complementary oligo, the symmetry term."
   },
   "method": {
    "nn": "santalucia-1998",
    "nnTable": "Biopython DNA_NN3",
    "salt": "owczarzy-2008",
    "saltText": "Owczarzy et al. 2008: Mg2+ and mixed-cation correction, regime by R = sqrt([Mg2+]) / [Mon+]",
    "concentration": "primerInExcess by default; equalStrands as the named alternative"
   },
   "oracle": "Biopython Bio.SeqUtils.MeltingTemp.Tm_NN",
   "oracleVersion": "1.88",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (oligo-tm)",
   "call": {
    "primerInExcess": "Bio.SeqUtils.MeltingTemp.Tm_NN('GCATCGGTACCTGATTGCAAGTCAGGTCAT', check=True, strict=True, nn_table=DNA_NN3, dnac1=250, dnac2=0, selfcomp=False, Na=50, K=0, Tris=0, Mg=3.0, dNTPs=0, saltcorr=7)",
    "equalStrands": "Bio.SeqUtils.MeltingTemp.Tm_NN('GCATCGGTACCTGATTGCAAGTCAGGTCAT', check=True, strict=True, nn_table=DNA_NN3, dnac1=125.0, dnac2=125.0, selfcomp=False, Na=50, K=0, Tris=0, Mg=3.0, dNTPs=0, saltcorr=7)"
   },
   "notes": "0.22 <= R < 6"
  },
  {
   "id": "T31",
   "input": {
    "sequence": "GCGGCCGCATCCGGGCAGCGCCCAGAGCTCGCCGGTTGCG",
    "name": "d40-gc",
    "length": 40,
    "gcPercent": 80.0,
    "selfComplementary": false,
    "oligoConcentration_nM": 250,
    "Na_mM": 50,
    "K_mM": 0,
    "Tris_mM": 0,
    "Mg_mM": 1.5,
    "dNTPs_mM": 0,
    "complement": "perfect complement (c_seq=None), no dangling ends, no mismatches"
   },
   "expected": {
    "defaultModel": "primerInExcess",
    "primerInExcess": {
     "tm_C": 91.54970840008644,
     "concentrationTerm_nM": 250.0,
     "dnac1_nM": 250,
     "dnac2_nM": 0,
     "symmetryTerm": false
    },
    "equalStrands": {
     "tm_C": 90.49843505297594,
     "concentrationTerm_nM": 62.5,
     "dnac1_nM": 125.0,
     "dnac2_nM": 125.0,
     "symmetryTerm": false,
     "x": 4
    },
    "saltRegime": {
     "R": 0.7745966692414833,
     "freeMg_mM": 1.5,
     "regimeId": "adjustedConstants",
     "regime": "0.22 <= R < 6: divalent formula with a, d and g adjusted for [Mon+]",
     "nearBoundary": false,
     "appliedCorrection": "owczarzy-2008",
     "note": "R, the regime and nearBoundary use free Mg2+; the regime decides the Tm where Owczarzy 2008 is applied (Mg2+ > 0).",
     "biopythonBranchVerified": true
    }
   },
   "oracleIntermediates": {
    "primerInExcess": {
     "deltaH_kcal_per_mol": -347.4999999999823,
     "deltaS_cal_per_K_mol": -901.0999999999523,
     "tmWithoutSaltCorrection_C": 99.9819298750503
    },
    "equalStrands": {
     "deltaH_kcal_per_mol": -347.49999999999375,
     "deltaS_cal_per_K_mol": -901.099999999983,
     "tmWithoutSaltCorrection_C": 98.88155489603344
    },
    "saltCorrection": 6.196467475589614e-05,
    "saltCorrectionApplies": "1/Tm(K) += corr",
    "derivation": "dH and dS recovered from two Biopython Tm_NN evaluations with saltcorr=0 at concentration terms k and 10k; they include initiation and, in equalStrands for a self-complementary oligo, the symmetry term."
   },
   "method": {
    "nn": "santalucia-1998",
    "nnTable": "Biopython DNA_NN3",
    "salt": "owczarzy-2008",
    "saltText": "Owczarzy et al. 2008: Mg2+ and mixed-cation correction, regime by R = sqrt([Mg2+]) / [Mon+]",
    "concentration": "primerInExcess by default; equalStrands as the named alternative"
   },
   "oracle": "Biopython Bio.SeqUtils.MeltingTemp.Tm_NN",
   "oracleVersion": "1.88",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (oligo-tm)",
   "call": {
    "primerInExcess": "Bio.SeqUtils.MeltingTemp.Tm_NN('GCGGCCGCATCCGGGCAGCGCCCAGAGCTCGCCGGTTGCG', check=True, strict=True, nn_table=DNA_NN3, dnac1=250, dnac2=0, selfcomp=False, Na=50, K=0, Tris=0, Mg=1.5, dNTPs=0, saltcorr=7)",
    "equalStrands": "Bio.SeqUtils.MeltingTemp.Tm_NN('GCGGCCGCATCCGGGCAGCGCCCAGAGCTCGCCGGTTGCG', check=True, strict=True, nn_table=DNA_NN3, dnac1=125.0, dnac2=125.0, selfcomp=False, Na=50, K=0, Tris=0, Mg=1.5, dNTPs=0, saltcorr=7)"
   },
   "notes": "40-mer, 80% GC; 0.22 <= R < 6"
  },
  {
   "id": "T32",
   "input": {
    "sequence": "CTGACGTAAGCTTACGTCAG",
    "name": "sc20",
    "length": 20,
    "gcPercent": 50.0,
    "selfComplementary": true,
    "oligoConcentration_nM": 500,
    "Na_mM": 50,
    "K_mM": 0,
    "Tris_mM": 0,
    "Mg_mM": 2.0,
    "dNTPs_mM": 0,
    "complement": "perfect complement (c_seq=None), no dangling ends, no mismatches"
   },
   "expected": {
    "defaultModel": "primerInExcess",
    "primerInExcess": {
     "tm_C": 61.912553920010225,
     "concentrationTerm_nM": 500.0,
     "dnac1_nM": 500,
     "dnac2_nM": 0,
     "symmetryTerm": false
    },
    "equalStrands": {
     "tm_C": 60.92818253390294,
     "concentrationTerm_nM": 500,
     "dnac1_nM": 500,
     "dnac2_nM": 0,
     "symmetryTerm": true,
     "x": 1
    },
    "saltRegime": {
     "R": 0.8944271909999159,
     "freeMg_mM": 2.0,
     "regimeId": "adjustedConstants",
     "regime": "0.22 <= R < 6: divalent formula with a, d and g adjusted for [Mon+]",
     "nearBoundary": false,
     "appliedCorrection": "owczarzy-2008",
     "note": "R, the regime and nearBoundary use free Mg2+; the regime decides the Tm where Owczarzy 2008 is applied (Mg2+ > 0).",
     "biopythonBranchVerified": true
    }
   },
   "oracleIntermediates": {
    "primerInExcess": {
     "deltaH_kcal_per_mol": -159.20000000000093,
     "deltaS_cal_per_K_mol": -434.80000000000257,
     "tmWithoutSaltCorrection_C": 70.22822269225713
    },
    "equalStrands": {
     "deltaH_kcal_per_mol": -159.20000000000093,
     "deltaS_cal_per_K_mol": -436.20000000000255,
     "tmWithoutSaltCorrection_C": 69.19445959603553
    },
    "saltCorrection": 7.227673728490557e-05,
    "saltCorrectionApplies": "1/Tm(K) += corr",
    "derivation": "dH and dS recovered from two Biopython Tm_NN evaluations with saltcorr=0 at concentration terms k and 10k; they include initiation and, in equalStrands for a self-complementary oligo, the symmetry term."
   },
   "method": {
    "nn": "santalucia-1998",
    "nnTable": "Biopython DNA_NN3",
    "salt": "owczarzy-2008",
    "saltText": "Owczarzy et al. 2008: Mg2+ and mixed-cation correction, regime by R = sqrt([Mg2+]) / [Mon+]",
    "concentration": "primerInExcess by default; equalStrands as the named alternative"
   },
   "oracle": "Biopython Bio.SeqUtils.MeltingTemp.Tm_NN",
   "oracleVersion": "1.88",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (oligo-tm)",
   "call": {
    "primerInExcess": "Bio.SeqUtils.MeltingTemp.Tm_NN('CTGACGTAAGCTTACGTCAG', check=True, strict=True, nn_table=DNA_NN3, dnac1=500, dnac2=0, selfcomp=False, Na=50, K=0, Tris=0, Mg=2.0, dNTPs=0, saltcorr=7)",
    "equalStrands": "Bio.SeqUtils.MeltingTemp.Tm_NN('CTGACGTAAGCTTACGTCAG', check=True, strict=True, nn_table=DNA_NN3, dnac1=500, dnac2=0, selfcomp=True, Na=50, K=0, Tris=0, Mg=2.0, dNTPs=0, saltcorr=7)"
   },
   "notes": "self-complementary; 0.22 <= R < 6"
  },
  {
   "id": "T33",
   "input": {
    "sequence": "AGCTTGACCTGAAGTCAGCA",
    "name": "d20-mid",
    "length": 20,
    "gcPercent": 50.0,
    "selfComplementary": false,
    "oligoConcentration_nM": 500,
    "Na_mM": 50,
    "K_mM": 0,
    "Tris_mM": 0,
    "Mg_mM": 1.5,
    "dNTPs_mM": 0,
    "complement": "perfect complement (c_seq=None), no dangling ends, no mismatches"
   },
   "expected": {
    "defaultModel": "primerInExcess",
    "primerInExcess": {
     "tm_C": 65.2021962988776,
     "concentrationTerm_nM": 500.0,
     "dnac1_nM": 500,
     "dnac2_nM": 0,
     "symmetryTerm": false
    },
    "equalStrands": {
     "tm_C": 63.15623002208571,
     "concentrationTerm_nM": 125.0,
     "dnac1_nM": 250.0,
     "dnac2_nM": 250.0,
     "symmetryTerm": false,
     "x": 4
    },
    "saltRegime": {
     "R": 0.7745966692414833,
     "freeMg_mM": 1.5,
     "regimeId": "adjustedConstants",
     "regime": "0.22 <= R < 6: divalent formula with a, d and g adjusted for [Mon+]",
     "nearBoundary": false,
     "appliedCorrection": "owczarzy-2008",
     "note": "R, the regime and nearBoundary use free Mg2+; the regime decides the Tm where Owczarzy 2008 is applied (Mg2+ > 0).",
     "biopythonBranchVerified": true
    }
   },
   "oracleIntermediates": {
    "primerInExcess": {
     "deltaH_kcal_per_mol": -153.19999999999942,
     "deltaS_cal_per_K_mol": -412.0999999999981,
     "tmWithoutSaltCorrection_C": 74.29846271791871
    },
    "equalStrands": {
     "deltaH_kcal_per_mol": -153.19999999999942,
     "deltaS_cal_per_K_mol": -412.09999999999803,
     "tmWithoutSaltCorrection_C": 72.14136079767991
    },
    "saltCorrection": 7.737555505382209e-05,
    "saltCorrectionApplies": "1/Tm(K) += corr",
    "derivation": "dH and dS recovered from two Biopython Tm_NN evaluations with saltcorr=0 at concentration terms k and 10k; they include initiation and, in equalStrands for a self-complementary oligo, the symmetry term."
   },
   "method": {
    "nn": "santalucia-1998",
    "nnTable": "Biopython DNA_NN3",
    "salt": "owczarzy-2008",
    "saltText": "Owczarzy et al. 2008: Mg2+ and mixed-cation correction, regime by R = sqrt([Mg2+]) / [Mon+]",
    "concentration": "primerInExcess by default; equalStrands as the named alternative"
   },
   "oracle": "Biopython Bio.SeqUtils.MeltingTemp.Tm_NN",
   "oracleVersion": "1.88",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (oligo-tm)",
   "call": {
    "primerInExcess": "Bio.SeqUtils.MeltingTemp.Tm_NN('AGCTTGACCTGAAGTCAGCA', check=True, strict=True, nn_table=DNA_NN3, dnac1=500, dnac2=0, selfcomp=False, Na=50, K=0, Tris=0, Mg=1.5, dNTPs=0, saltcorr=7)",
    "equalStrands": "Bio.SeqUtils.MeltingTemp.Tm_NN('AGCTTGACCTGAAGTCAGCA', check=True, strict=True, nn_table=DNA_NN3, dnac1=250.0, dnac2=250.0, selfcomp=False, Na=50, K=0, Tris=0, Mg=1.5, dNTPs=0, saltcorr=7)"
   },
   "notes": "0.22 <= R < 6"
  },
  {
   "id": "T34",
   "input": {
    "sequence": "TTGGCAGTCACCATGAGCCTAC",
    "name": "d22",
    "length": 22,
    "gcPercent": 54.54545454545455,
    "selfComplementary": false,
    "oligoConcentration_nM": 250,
    "Na_mM": 1000,
    "K_mM": 0,
    "Tris_mM": 0,
    "Mg_mM": 1.5,
    "dNTPs_mM": 0,
    "complement": "perfect complement (c_seq=None), no dangling ends, no mismatches"
   },
   "expected": {
    "defaultModel": "primerInExcess",
    "primerInExcess": {
     "tm_C": 76.25316375543139,
     "concentrationTerm_nM": 250.0,
     "dnac1_nM": 250,
     "dnac2_nM": 0,
     "symmetryTerm": false
    },
    "equalStrands": {
     "tm_C": 74.29759380638683,
     "concentrationTerm_nM": 62.5,
     "dnac1_nM": 125.0,
     "dnac2_nM": 125.0,
     "symmetryTerm": false,
     "x": 4
    },
    "saltRegime": {
     "R": 0.03872983346207417,
     "freeMg_mM": 1.5,
     "regimeId": "monovalent2004",
     "regime": "R < 0.22: monovalent (Owczarzy 2004) formula",
     "nearBoundary": false,
     "appliedCorrection": "owczarzy-2008",
     "note": "R, the regime and nearBoundary use free Mg2+; the regime decides the Tm where Owczarzy 2008 is applied (Mg2+ > 0).",
     "biopythonBranchVerified": true
    }
   },
   "oracleIntermediates": {
    "primerInExcess": {
     "deltaH_kcal_per_mol": -170.99999999999756,
     "deltaS_cal_per_K_mol": -459.19999999999277,
     "tmWithoutSaltCorrection_C": 76.25316375543139
    },
    "equalStrands": {
     "deltaH_kcal_per_mol": -170.99999999999756,
     "deltaS_cal_per_K_mol": -459.19999999999277,
     "tmWithoutSaltCorrection_C": 74.29759380638683
    },
    "saltCorrection": 0.0,
    "saltCorrectionApplies": "1/Tm(K) += corr",
    "derivation": "dH and dS recovered from two Biopython Tm_NN evaluations with saltcorr=0 at concentration terms k and 10k; they include initiation and, in equalStrands for a self-complementary oligo, the symmetry term."
   },
   "method": {
    "nn": "santalucia-1998",
    "nnTable": "Biopython DNA_NN3",
    "salt": "owczarzy-2008",
    "saltText": "Owczarzy et al. 2008: Mg2+ and mixed-cation correction, regime by R = sqrt([Mg2+]) / [Mon+]",
    "concentration": "primerInExcess by default; equalStrands as the named alternative"
   },
   "oracle": "Biopython Bio.SeqUtils.MeltingTemp.Tm_NN",
   "oracleVersion": "1.88",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (oligo-tm)",
   "call": {
    "primerInExcess": "Bio.SeqUtils.MeltingTemp.Tm_NN('TTGGCAGTCACCATGAGCCTAC', check=True, strict=True, nn_table=DNA_NN3, dnac1=250, dnac2=0, selfcomp=False, Na=1000, K=0, Tris=0, Mg=1.5, dNTPs=0, saltcorr=7)",
    "equalStrands": "Bio.SeqUtils.MeltingTemp.Tm_NN('TTGGCAGTCACCATGAGCCTAC', check=True, strict=True, nn_table=DNA_NN3, dnac1=125.0, dnac2=125.0, selfcomp=False, Na=1000, K=0, Tris=0, Mg=1.5, dNTPs=0, saltcorr=7)"
   },
   "notes": "R < 0.22: the monovalent (2004) formula applies"
  },
  {
   "id": "T35",
   "input": {
    "sequence": "GACTCGGTACCAGTGCACTGGTACCGAGTC",
    "name": "sc30",
    "length": 30,
    "gcPercent": 60.0,
    "selfComplementary": true,
    "oligoConcentration_nM": 500,
    "Na_mM": 1000,
    "K_mM": 0,
    "Tris_mM": 0,
    "Mg_mM": 3.0,
    "dNTPs_mM": 0,
    "complement": "perfect complement (c_seq=None), no dangling ends, no mismatches"
   },
   "expected": {
    "defaultModel": "primerInExcess",
    "primerInExcess": {
     "tm_C": 84.25156521551372,
     "concentrationTerm_nM": 500.0,
     "dnac1_nM": 500,
     "dnac2_nM": 0,
     "symmetryTerm": false
    },
    "equalStrands": {
     "tm_C": 83.51533646421586,
     "concentrationTerm_nM": 500,
     "dnac1_nM": 500,
     "dnac2_nM": 0,
     "symmetryTerm": true,
     "x": 1
    },
    "saltRegime": {
     "R": 0.05477225575051661,
     "freeMg_mM": 3.0,
     "regimeId": "monovalent2004",
     "regime": "R < 0.22: monovalent (Owczarzy 2004) formula",
     "nearBoundary": false,
     "appliedCorrection": "owczarzy-2008",
     "note": "R, the regime and nearBoundary use free Mg2+; the regime decides the Tm where Owczarzy 2008 is applied (Mg2+ > 0).",
     "biopythonBranchVerified": true
    }
   },
   "oracleIntermediates": {
    "primerInExcess": {
     "deltaH_kcal_per_mol": -242.4000000000065,
     "deltaS_cal_per_K_mol": -649.400000000018,
     "tmWithoutSaltCorrection_C": 84.25156521551372
    },
    "equalStrands": {
     "deltaH_kcal_per_mol": -242.40000000000092,
     "deltaS_cal_per_K_mol": -650.8000000000025,
     "tmWithoutSaltCorrection_C": 83.51533646421586
    },
    "saltCorrection": 0.0,
    "saltCorrectionApplies": "1/Tm(K) += corr",
    "derivation": "dH and dS recovered from two Biopython Tm_NN evaluations with saltcorr=0 at concentration terms k and 10k; they include initiation and, in equalStrands for a self-complementary oligo, the symmetry term."
   },
   "method": {
    "nn": "santalucia-1998",
    "nnTable": "Biopython DNA_NN3",
    "salt": "owczarzy-2008",
    "saltText": "Owczarzy et al. 2008: Mg2+ and mixed-cation correction, regime by R = sqrt([Mg2+]) / [Mon+]",
    "concentration": "primerInExcess by default; equalStrands as the named alternative"
   },
   "oracle": "Biopython Bio.SeqUtils.MeltingTemp.Tm_NN",
   "oracleVersion": "1.88",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (oligo-tm)",
   "call": {
    "primerInExcess": "Bio.SeqUtils.MeltingTemp.Tm_NN('GACTCGGTACCAGTGCACTGGTACCGAGTC', check=True, strict=True, nn_table=DNA_NN3, dnac1=500, dnac2=0, selfcomp=False, Na=1000, K=0, Tris=0, Mg=3.0, dNTPs=0, saltcorr=7)",
    "equalStrands": "Bio.SeqUtils.MeltingTemp.Tm_NN('GACTCGGTACCAGTGCACTGGTACCGAGTC', check=True, strict=True, nn_table=DNA_NN3, dnac1=500, dnac2=0, selfcomp=True, Na=1000, K=0, Tris=0, Mg=3.0, dNTPs=0, saltcorr=7)"
   },
   "notes": "self-complementary; R < 0.22"
  },
  {
   "id": "T36",
   "input": {
    "sequence": "TAGAAGGCACAGTCGAGG",
    "name": "BGH-reverse",
    "length": 18,
    "gcPercent": 55.55555555555556,
    "selfComplementary": false,
    "oligoConcentration_nM": 250,
    "Na_mM": 50,
    "K_mM": 0,
    "Tris_mM": 0,
    "Mg_mM": 0.11,
    "dNTPs_mM": 0,
    "complement": "perfect complement (c_seq=None), no dangling ends, no mismatches"
   },
   "expected": {
    "defaultModel": "primerInExcess",
    "primerInExcess": {
     "tm_C": 54.888463442459,
     "concentrationTerm_nM": 250.0,
     "dnac1_nM": 250,
     "dnac2_nM": 0,
     "symmetryTerm": false
    },
    "equalStrands": {
     "tm_C": 52.765188512699126,
     "concentrationTerm_nM": 62.5,
     "dnac1_nM": 125.0,
     "dnac2_nM": 125.0,
     "symmetryTerm": false,
     "x": 4
    },
    "saltRegime": {
     "R": 0.2097617696340303,
     "freeMg_mM": 0.11,
     "regimeId": "monovalent2004",
     "regime": "R < 0.22: monovalent (Owczarzy 2004) formula",
     "nearBoundary": true,
     "appliedCorrection": "owczarzy-2008",
     "note": "R, the regime and nearBoundary use free Mg2+; the regime decides the Tm where Owczarzy 2008 is applied (Mg2+ > 0).",
     "biopythonBranchVerified": true
    }
   },
   "oracleIntermediates": {
    "primerInExcess": {
     "deltaH_kcal_per_mol": -138.6999999999995,
     "deltaS_cal_per_K_mol": -374.3999999999984,
     "tmWithoutSaltCorrection_C": 69.65263928600501
    },
    "equalStrands": {
     "deltaH_kcal_per_mol": -138.6999999999995,
     "deltaS_cal_per_K_mol": -374.39999999999833,
     "tmWithoutSaltCorrection_C": 67.33461218617083
    },
    "saltCorrection": 0.00013129261038758773,
    "saltCorrectionApplies": "1/Tm(K) += corr",
    "derivation": "dH and dS recovered from two Biopython Tm_NN evaluations with saltcorr=0 at concentration terms k and 10k; they include initiation and, in equalStrands for a self-complementary oligo, the symmetry term."
   },
   "method": {
    "nn": "santalucia-1998",
    "nnTable": "Biopython DNA_NN3",
    "salt": "owczarzy-2008",
    "saltText": "Owczarzy et al. 2008: Mg2+ and mixed-cation correction, regime by R = sqrt([Mg2+]) / [Mon+]",
    "concentration": "primerInExcess by default; equalStrands as the named alternative"
   },
   "oracle": "Biopython Bio.SeqUtils.MeltingTemp.Tm_NN",
   "oracleVersion": "1.88",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (oligo-tm)",
   "call": {
    "primerInExcess": "Bio.SeqUtils.MeltingTemp.Tm_NN('TAGAAGGCACAGTCGAGG', check=True, strict=True, nn_table=DNA_NN3, dnac1=250, dnac2=0, selfcomp=False, Na=50, K=0, Tris=0, Mg=0.11, dNTPs=0, saltcorr=7)",
    "equalStrands": "Bio.SeqUtils.MeltingTemp.Tm_NN('TAGAAGGCACAGTCGAGG', check=True, strict=True, nn_table=DNA_NN3, dnac1=125.0, dnac2=125.0, selfcomp=False, Na=50, K=0, Tris=0, Mg=0.11, dNTPs=0, saltcorr=7)"
   },
   "notes": "regime boundary: R just below 0.22 (Mg2+ outside 1.5-3 mM on purpose)"
  },
  {
   "id": "T37",
   "input": {
    "sequence": "TAGAAGGCACAGTCGAGG",
    "name": "BGH-reverse",
    "length": 18,
    "gcPercent": 55.55555555555556,
    "selfComplementary": false,
    "oligoConcentration_nM": 250,
    "Na_mM": 50,
    "K_mM": 0,
    "Tris_mM": 0,
    "Mg_mM": 0.133,
    "dNTPs_mM": 0,
    "complement": "perfect complement (c_seq=None), no dangling ends, no mismatches"
   },
   "expected": {
    "defaultModel": "primerInExcess",
    "primerInExcess": {
     "tm_C": 54.14963240617908,
     "concentrationTerm_nM": 250.0,
     "dnac1_nM": 250,
     "dnac2_nM": 0,
     "symmetryTerm": false
    },
    "equalStrands": {
     "tm_C": 52.03588026595162,
     "concentrationTerm_nM": 62.5,
     "dnac1_nM": 125.0,
     "dnac2_nM": 125.0,
     "symmetryTerm": false,
     "x": 4
    },
    "saltRegime": {
     "R": 0.23065125189341593,
     "freeMg_mM": 0.133,
     "regimeId": "adjustedConstants",
     "regime": "0.22 <= R < 6: divalent formula with a, d and g adjusted for [Mon+]",
     "nearBoundary": true,
     "appliedCorrection": "owczarzy-2008",
     "note": "R, the regime and nearBoundary use free Mg2+; the regime decides the Tm where Owczarzy 2008 is applied (Mg2+ > 0).",
     "biopythonBranchVerified": true
    }
   },
   "oracleIntermediates": {
    "primerInExcess": {
     "deltaH_kcal_per_mol": -138.6999999999995,
     "deltaS_cal_per_K_mol": -374.3999999999984,
     "tmWithoutSaltCorrection_C": 69.65263928600501
    },
    "equalStrands": {
     "deltaH_kcal_per_mol": -138.6999999999995,
     "deltaS_cal_per_K_mol": -374.39999999999833,
     "tmWithoutSaltCorrection_C": 67.33461218617083
    },
    "saltCorrection": 0.0001381739793480812,
    "saltCorrectionApplies": "1/Tm(K) += corr",
    "derivation": "dH and dS recovered from two Biopython Tm_NN evaluations with saltcorr=0 at concentration terms k and 10k; they include initiation and, in equalStrands for a self-complementary oligo, the symmetry term."
   },
   "method": {
    "nn": "santalucia-1998",
    "nnTable": "Biopython DNA_NN3",
    "salt": "owczarzy-2008",
    "saltText": "Owczarzy et al. 2008: Mg2+ and mixed-cation correction, regime by R = sqrt([Mg2+]) / [Mon+]",
    "concentration": "primerInExcess by default; equalStrands as the named alternative"
   },
   "oracle": "Biopython Bio.SeqUtils.MeltingTemp.Tm_NN",
   "oracleVersion": "1.88",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (oligo-tm)",
   "call": {
    "primerInExcess": "Bio.SeqUtils.MeltingTemp.Tm_NN('TAGAAGGCACAGTCGAGG', check=True, strict=True, nn_table=DNA_NN3, dnac1=250, dnac2=0, selfcomp=False, Na=50, K=0, Tris=0, Mg=0.133, dNTPs=0, saltcorr=7)",
    "equalStrands": "Bio.SeqUtils.MeltingTemp.Tm_NN('TAGAAGGCACAGTCGAGG', check=True, strict=True, nn_table=DNA_NN3, dnac1=125.0, dnac2=125.0, selfcomp=False, Na=50, K=0, Tris=0, Mg=0.133, dNTPs=0, saltcorr=7)"
   },
   "notes": "regime boundary: R just above 0.22 (Mg2+ outside 1.5-3 mM on purpose)"
  },
  {
   "id": "T38",
   "input": {
    "sequence": "GGGCTGGCAAGCCACGTTTGGTG",
    "name": "pGEX-5",
    "length": 23,
    "gcPercent": 65.21739130434783,
    "selfComplementary": false,
    "oligoConcentration_nM": 250,
    "Na_mM": 9.3,
    "K_mM": 0,
    "Tris_mM": 0,
    "Mg_mM": 3.0,
    "dNTPs_mM": 0,
    "complement": "perfect complement (c_seq=None), no dangling ends, no mismatches"
   },
   "expected": {
    "defaultModel": "primerInExcess",
    "primerInExcess": {
     "tm_C": 74.4887207892587,
     "concentrationTerm_nM": 250.0,
     "dnac1_nM": 250,
     "dnac2_nM": 0,
     "symmetryTerm": false
    },
    "equalStrands": {
     "tm_C": 72.7157070602035,
     "concentrationTerm_nM": 62.5,
     "dnac1_nM": 125.0,
     "dnac2_nM": 125.0,
     "symmetryTerm": false,
     "x": 4
    },
    "saltRegime": {
     "R": 5.889489865646947,
     "freeMg_mM": 3.0,
     "regimeId": "adjustedConstants",
     "regime": "0.22 <= R < 6: divalent formula with a, d and g adjusted for [Mon+]",
     "nearBoundary": true,
     "appliedCorrection": "owczarzy-2008",
     "note": "R, the regime and nearBoundary use free Mg2+; the regime decides the Tm where Owczarzy 2008 is applied (Mg2+ > 0).",
     "biopythonBranchVerified": true
    }
   },
   "oracleIntermediates": {
    "primerInExcess": {
     "deltaH_kcal_per_mol": -186.79999999999757,
     "deltaS_cal_per_K_mol": -494.79999999999296,
     "tmWithoutSaltCorrection_C": 82.65546669586064
    },
    "equalStrands": {
     "deltaH_kcal_per_mol": -186.80000000000086,
     "deltaS_cal_per_K_mol": -494.8000000000022,
     "tmWithoutSaltCorrection_C": 80.79839353315032
    },
    "saltCorrection": 6.60249808507799e-05,
    "saltCorrectionApplies": "1/Tm(K) += corr",
    "derivation": "dH and dS recovered from two Biopython Tm_NN evaluations with saltcorr=0 at concentration terms k and 10k; they include initiation and, in equalStrands for a self-complementary oligo, the symmetry term."
   },
   "method": {
    "nn": "santalucia-1998",
    "nnTable": "Biopython DNA_NN3",
    "salt": "owczarzy-2008",
    "saltText": "Owczarzy et al. 2008: Mg2+ and mixed-cation correction, regime by R = sqrt([Mg2+]) / [Mon+]",
    "concentration": "primerInExcess by default; equalStrands as the named alternative"
   },
   "oracle": "Biopython Bio.SeqUtils.MeltingTemp.Tm_NN",
   "oracleVersion": "1.88",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (oligo-tm)",
   "call": {
    "primerInExcess": "Bio.SeqUtils.MeltingTemp.Tm_NN('GGGCTGGCAAGCCACGTTTGGTG', check=True, strict=True, nn_table=DNA_NN3, dnac1=250, dnac2=0, selfcomp=False, Na=9.3, K=0, Tris=0, Mg=3.0, dNTPs=0, saltcorr=7)",
    "equalStrands": "Bio.SeqUtils.MeltingTemp.Tm_NN('GGGCTGGCAAGCCACGTTTGGTG', check=True, strict=True, nn_table=DNA_NN3, dnac1=125.0, dnac2=125.0, selfcomp=False, Na=9.3, K=0, Tris=0, Mg=3.0, dNTPs=0, saltcorr=7)"
   },
   "notes": "regime boundary: R just below 6 (Na+ outside 50 mM/1 M on purpose)"
  },
  {
   "id": "T39",
   "input": {
    "sequence": "GGGCTGGCAAGCCACGTTTGGTG",
    "name": "pGEX-5",
    "length": 23,
    "gcPercent": 65.21739130434783,
    "selfComplementary": false,
    "oligoConcentration_nM": 250,
    "Na_mM": 8.9,
    "K_mM": 0,
    "Tris_mM": 0,
    "Mg_mM": 3.0,
    "dNTPs_mM": 0,
    "complement": "perfect complement (c_seq=None), no dangling ends, no mismatches"
   },
   "expected": {
    "defaultModel": "primerInExcess",
    "primerInExcess": {
     "tm_C": 74.90123380080132,
     "concentrationTerm_nM": 250.0,
     "dnac1_nM": 250,
     "dnac2_nM": 0,
     "symmetryTerm": false
    },
    "equalStrands": {
     "tm_C": 73.12402056458905,
     "concentrationTerm_nM": 62.5,
     "dnac1_nM": 125.0,
     "dnac2_nM": 125.0,
     "symmetryTerm": false,
     "x": 4
    },
    "saltRegime": {
     "R": 6.154186039383889,
     "freeMg_mM": 3.0,
     "regimeId": "originalConstants",
     "regime": "R >= 6: divalent formula, original constants",
     "nearBoundary": true,
     "appliedCorrection": "owczarzy-2008",
     "note": "R, the regime and nearBoundary use free Mg2+; the regime decides the Tm where Owczarzy 2008 is applied (Mg2+ > 0).",
     "biopythonBranchVerified": true
    }
   },
   "oracleIntermediates": {
    "primerInExcess": {
     "deltaH_kcal_per_mol": -186.79999999999757,
     "deltaS_cal_per_K_mol": -494.79999999999296,
     "tmWithoutSaltCorrection_C": 82.65546669586064
    },
    "equalStrands": {
     "deltaH_kcal_per_mol": -186.80000000000086,
     "deltaS_cal_per_K_mol": -494.8000000000022,
     "tmWithoutSaltCorrection_C": 80.79839353315032
    },
    "saltCorrection": 6.261567211820194e-05,
    "saltCorrectionApplies": "1/Tm(K) += corr",
    "derivation": "dH and dS recovered from two Biopython Tm_NN evaluations with saltcorr=0 at concentration terms k and 10k; they include initiation and, in equalStrands for a self-complementary oligo, the symmetry term."
   },
   "method": {
    "nn": "santalucia-1998",
    "nnTable": "Biopython DNA_NN3",
    "salt": "owczarzy-2008",
    "saltText": "Owczarzy et al. 2008: Mg2+ and mixed-cation correction, regime by R = sqrt([Mg2+]) / [Mon+]",
    "concentration": "primerInExcess by default; equalStrands as the named alternative"
   },
   "oracle": "Biopython Bio.SeqUtils.MeltingTemp.Tm_NN",
   "oracleVersion": "1.88",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (oligo-tm)",
   "call": {
    "primerInExcess": "Bio.SeqUtils.MeltingTemp.Tm_NN('GGGCTGGCAAGCCACGTTTGGTG', check=True, strict=True, nn_table=DNA_NN3, dnac1=250, dnac2=0, selfcomp=False, Na=8.9, K=0, Tris=0, Mg=3.0, dNTPs=0, saltcorr=7)",
    "equalStrands": "Bio.SeqUtils.MeltingTemp.Tm_NN('GGGCTGGCAAGCCACGTTTGGTG', check=True, strict=True, nn_table=DNA_NN3, dnac1=125.0, dnac2=125.0, selfcomp=False, Na=8.9, K=0, Tris=0, Mg=3.0, dNTPs=0, saltcorr=7)"
   },
   "notes": "regime boundary: R just above 6 (Na+ outside 50 mM/1 M on purpose)"
  },
  {
   "id": "T40",
   "input": {
    "sequence": "ATTAACCCTCACTAAAGGGA",
    "name": "T3",
    "length": 20,
    "gcPercent": 40.0,
    "selfComplementary": false,
    "oligoConcentration_nM": 250,
    "Na_mM": 0,
    "K_mM": 0,
    "Tris_mM": 0,
    "Mg_mM": 2.0,
    "dNTPs_mM": 0,
    "complement": "perfect complement (c_seq=None), no dangling ends, no mismatches"
   },
   "expected": {
    "defaultModel": "primerInExcess",
    "primerInExcess": {
     "tm_C": 58.953003564420555,
     "concentrationTerm_nM": 250.0,
     "dnac1_nM": 250,
     "dnac2_nM": 0,
     "symmetryTerm": false
    },
    "equalStrands": {
     "tm_C": 56.88085390624377,
     "concentrationTerm_nM": 62.5,
     "dnac1_nM": 125.0,
     "dnac2_nM": 125.0,
     "symmetryTerm": false,
     "x": 4
    },
    "saltRegime": {
     "R": null,
     "freeMg_mM": 2.0,
     "regimeId": "originalConstants",
     "regime": "no monovalent ions: R undefined; divalent formula with the original constants",
     "nearBoundary": false,
     "appliedCorrection": "owczarzy-2008",
     "note": "R, the regime and nearBoundary use free Mg2+; the regime decides the Tm where Owczarzy 2008 is applied (Mg2+ > 0).",
     "biopythonBranchVerified": true
    }
   },
   "oracleIntermediates": {
    "primerInExcess": {
     "deltaH_kcal_per_mol": -145.69999999999814,
     "deltaS_cal_per_K_mol": -398.09999999999445,
     "tmWithoutSaltCorrection_C": 67.02736066079353
    },
    "equalStrands": {
     "deltaH_kcal_per_mol": -145.70000000000016,
     "deltaS_cal_per_K_mol": -398.1000000000003,
     "tmWithoutSaltCorrection_C": 64.85355633288106
    },
    "saltCorrection": 7.147098079124461e-05,
    "saltCorrectionApplies": "1/Tm(K) += corr",
    "derivation": "dH and dS recovered from two Biopython Tm_NN evaluations with saltcorr=0 at concentration terms k and 10k; they include initiation and, in equalStrands for a self-complementary oligo, the symmetry term."
   },
   "method": {
    "nn": "santalucia-1998",
    "nnTable": "Biopython DNA_NN3",
    "salt": "owczarzy-2008",
    "saltText": "Owczarzy et al. 2008: Mg2+ and mixed-cation correction, regime by R = sqrt([Mg2+]) / [Mon+]",
    "concentration": "primerInExcess by default; equalStrands as the named alternative"
   },
   "oracle": "Biopython Bio.SeqUtils.MeltingTemp.Tm_NN",
   "oracleVersion": "1.88",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (oligo-tm)",
   "call": {
    "primerInExcess": "Bio.SeqUtils.MeltingTemp.Tm_NN('ATTAACCCTCACTAAAGGGA', check=True, strict=True, nn_table=DNA_NN3, dnac1=250, dnac2=0, selfcomp=False, Na=0, K=0, Tris=0, Mg=2.0, dNTPs=0, saltcorr=7)",
    "equalStrands": "Bio.SeqUtils.MeltingTemp.Tm_NN('ATTAACCCTCACTAAAGGGA', check=True, strict=True, nn_table=DNA_NN3, dnac1=125.0, dnac2=125.0, selfcomp=False, Na=0, K=0, Tris=0, Mg=2.0, dNTPs=0, saltcorr=7)"
   },
   "notes": "no monovalent ions: R undefined, divalent formula with the original constants"
  },
  {
   "id": "T41",
   "input": {
    "sequence": "TAATACGACTCACTATAGGG",
    "name": "T7-promoter",
    "length": 20,
    "gcPercent": 40.0,
    "selfComplementary": false,
    "oligoConcentration_nM": 250,
    "Na_mM": 50,
    "K_mM": 0,
    "Tris_mM": 0,
    "Mg_mM": 1.5,
    "dNTPs_mM": 0.8,
    "complement": "perfect complement (c_seq=None), no dangling ends, no mismatches"
   },
   "expected": {
    "defaultModel": "primerInExcess",
    "primerInExcess": {
     "tm_C": 53.17372495090177,
     "concentrationTerm_nM": 250.0,
     "dnac1_nM": 250,
     "dnac2_nM": 0,
     "symmetryTerm": false
    },
    "equalStrands": {
     "tm_C": 51.21428449422842,
     "concentrationTerm_nM": 62.5,
     "dnac1_nM": 125.0,
     "dnac2_nM": 125.0,
     "symmetryTerm": false,
     "x": 4
    },
    "saltRegime": {
     "R": 0.5421143124076605,
     "freeMg_mM": 0.7347198192930765,
     "regimeId": "adjustedConstants",
     "regime": "0.22 <= R < 6: divalent formula with a, d and g adjusted for [Mon+]",
     "nearBoundary": false,
     "appliedCorrection": "owczarzy-2008",
     "note": "R, the regime and nearBoundary use free Mg2+; the regime decides the Tm where Owczarzy 2008 is applied (Mg2+ > 0).",
     "biopythonBranchVerified": true
    }
   },
   "oracleIntermediates": {
    "primerInExcess": {
     "deltaH_kcal_per_mol": -148.79999999999623,
     "deltaS_cal_per_K_mol": -411.19999999998885,
     "tmWithoutSaltCorrection_C": 63.95462611136554
    },
    "equalStrands": {
     "deltaH_kcal_per_mol": -148.80000000000044,
     "deltaS_cal_per_K_mol": -411.20000000000124,
     "tmWithoutSaltCorrection_C": 61.863991910319044
    },
    "saltCorrection": 9.80035262499388e-05,
    "saltCorrectionApplies": "1/Tm(K) += corr",
    "derivation": "dH and dS recovered from two Biopython Tm_NN evaluations with saltcorr=0 at concentration terms k and 10k; they include initiation and, in equalStrands for a self-complementary oligo, the symmetry term."
   },
   "method": {
    "nn": "santalucia-1998",
    "nnTable": "Biopython DNA_NN3",
    "salt": "owczarzy-2008",
    "saltText": "Owczarzy et al. 2008: Mg2+ and mixed-cation correction, regime by R = sqrt([Mg2+]) / [Mon+]",
    "concentration": "primerInExcess by default; equalStrands as the named alternative"
   },
   "oracle": "Biopython Bio.SeqUtils.MeltingTemp.Tm_NN",
   "oracleVersion": "1.88",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (oligo-tm)",
   "call": {
    "primerInExcess": "Bio.SeqUtils.MeltingTemp.Tm_NN('TAATACGACTCACTATAGGG', check=True, strict=True, nn_table=DNA_NN3, dnac1=250, dnac2=0, selfcomp=False, Na=50, K=0, Tris=0, Mg=1.5, dNTPs=0.8, saltcorr=7)",
    "equalStrands": "Bio.SeqUtils.MeltingTemp.Tm_NN('TAATACGACTCACTATAGGG', check=True, strict=True, nn_table=DNA_NN3, dnac1=125.0, dnac2=125.0, selfcomp=False, Na=50, K=0, Tris=0, Mg=1.5, dNTPs=0.8, saltcorr=7)"
   },
   "notes": "dNTPs: a typical PCR (0.2 mM each dNTP); free Mg2+ 0.73 mM"
  },
  {
   "id": "T42",
   "input": {
    "sequence": "GTAAAACGACGGCCAGT",
    "name": "M13F-20",
    "length": 17,
    "gcPercent": 52.94117647058823,
    "selfComplementary": false,
    "oligoConcentration_nM": 500,
    "Na_mM": 50,
    "K_mM": 0,
    "Tris_mM": 0,
    "Mg_mM": 3.0,
    "dNTPs_mM": 0.8,
    "complement": "perfect complement (c_seq=None), no dangling ends, no mismatches"
   },
   "expected": {
    "defaultModel": "primerInExcess",
    "primerInExcess": {
     "tm_C": 61.985715325610045,
     "concentrationTerm_nM": 500.0,
     "dnac1_nM": 500,
     "dnac2_nM": 0,
     "symmetryTerm": false
    },
    "equalStrands": {
     "tm_C": 59.68587486898616,
     "concentrationTerm_nM": 125.0,
     "dnac1_nM": 250.0,
     "dnac2_nM": 250.0,
     "symmetryTerm": false,
     "x": 4
    },
    "saltRegime": {
     "R": 0.9406119570751826,
     "freeMg_mM": 2.2118771344820134,
     "regimeId": "adjustedConstants",
     "regime": "0.22 <= R < 6: divalent formula with a, d and g adjusted for [Mon+]",
     "nearBoundary": false,
     "appliedCorrection": "owczarzy-2008",
     "note": "R, the regime and nearBoundary use free Mg2+; the regime decides the Tm where Owczarzy 2008 is applied (Mg2+ > 0).",
     "biopythonBranchVerified": true
    }
   },
   "oracleIntermediates": {
    "primerInExcess": {
     "deltaH_kcal_per_mol": -133.5999999999997,
     "deltaS_cal_per_K_mol": -360.6999999999991,
     "tmWithoutSaltCorrection_C": 69.82857640859629
    },
    "equalStrands": {
     "deltaH_kcal_per_mol": -133.5999999999997,
     "deltaS_cal_per_K_mol": -360.6999999999991,
     "tmWithoutSaltCorrection_C": 67.42022126032538
    },
    "saltCorrection": 6.823179809265988e-05,
    "saltCorrectionApplies": "1/Tm(K) += corr",
    "derivation": "dH and dS recovered from two Biopython Tm_NN evaluations with saltcorr=0 at concentration terms k and 10k; they include initiation and, in equalStrands for a self-complementary oligo, the symmetry term."
   },
   "method": {
    "nn": "santalucia-1998",
    "nnTable": "Biopython DNA_NN3",
    "salt": "owczarzy-2008",
    "saltText": "Owczarzy et al. 2008: Mg2+ and mixed-cation correction, regime by R = sqrt([Mg2+]) / [Mon+]",
    "concentration": "primerInExcess by default; equalStrands as the named alternative"
   },
   "oracle": "Biopython Bio.SeqUtils.MeltingTemp.Tm_NN",
   "oracleVersion": "1.88",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (oligo-tm)",
   "call": {
    "primerInExcess": "Bio.SeqUtils.MeltingTemp.Tm_NN('GTAAAACGACGGCCAGT', check=True, strict=True, nn_table=DNA_NN3, dnac1=500, dnac2=0, selfcomp=False, Na=50, K=0, Tris=0, Mg=3.0, dNTPs=0.8, saltcorr=7)",
    "equalStrands": "Bio.SeqUtils.MeltingTemp.Tm_NN('GTAAAACGACGGCCAGT', check=True, strict=True, nn_table=DNA_NN3, dnac1=250.0, dnac2=250.0, selfcomp=False, Na=50, K=0, Tris=0, Mg=3.0, dNTPs=0.8, saltcorr=7)"
   },
   "notes": "dNTPs; free Mg2+ 2.21 mM"
  },
  {
   "id": "T43",
   "input": {
    "sequence": "ACGTTGACCAGGTATCAGCATTGCA",
    "name": "d25",
    "length": 25,
    "gcPercent": 48.0,
    "selfComplementary": false,
    "oligoConcentration_nM": 250,
    "Na_mM": 50,
    "K_mM": 0,
    "Tris_mM": 0,
    "Mg_mM": 1.0,
    "dNTPs_mM": 1.2,
    "complement": "perfect complement (c_seq=None), no dangling ends, no mismatches"
   },
   "expected": {
    "defaultModel": "primerInExcess",
    "primerInExcess": {
     "tm_C": 61.73211769660634,
     "concentrationTerm_nM": 250.0,
     "dnac1_nM": 250,
     "dnac2_nM": 0,
     "symmetryTerm": false
    },
    "equalStrands": {
     "tm_C": 60.16021717775203,
     "concentrationTerm_nM": 62.5,
     "dnac1_nM": 125.0,
     "dnac2_nM": 125.0,
     "symmetryTerm": false,
     "x": 4
    },
    "saltRegime": {
     "R": 0.19999999999999998,
     "freeMg_mM": 0.1,
     "regimeId": "monovalent2004",
     "regime": "R < 0.22: monovalent (Owczarzy 2004) formula",
     "nearBoundary": true,
     "appliedCorrection": "owczarzy-2008",
     "note": "R, the regime and nearBoundary use free Mg2+; the regime decides the Tm where Owczarzy 2008 is applied (Mg2+ > 0).",
     "biopythonBranchVerified": true
    }
   },
   "oracleIntermediates": {
    "primerInExcess": {
     "deltaH_kcal_per_mol": -195.5999999999963,
     "deltaS_cal_per_K_mol": -526.2999999999892,
     "tmWithoutSaltCorrection_C": 78.32869886249466
    },
    "equalStrands": {
     "deltaH_kcal_per_mol": -195.59999999999994,
     "deltaS_cal_per_K_mol": -526.2999999999995,
     "tmWithoutSaltCorrection_C": 76.59753512724564
    },
    "saltCorrection": 0.00014100277726360072,
    "saltCorrectionApplies": "1/Tm(K) += corr",
    "derivation": "dH and dS recovered from two Biopython Tm_NN evaluations with saltcorr=0 at concentration terms k and 10k; they include initiation and, in equalStrands for a self-complementary oligo, the symmetry term."
   },
   "method": {
    "nn": "santalucia-1998",
    "nnTable": "Biopython DNA_NN3",
    "salt": "owczarzy-2008",
    "saltText": "Owczarzy et al. 2008: Mg2+ and mixed-cation correction, regime by R = sqrt([Mg2+]) / [Mon+]",
    "concentration": "primerInExcess by default; equalStrands as the named alternative"
   },
   "oracle": "Biopython Bio.SeqUtils.MeltingTemp.Tm_NN",
   "oracleVersion": "1.88",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (oligo-tm)",
   "call": {
    "primerInExcess": "Bio.SeqUtils.MeltingTemp.Tm_NN('ACGTTGACCAGGTATCAGCATTGCA', check=True, strict=True, nn_table=DNA_NN3, dnac1=250, dnac2=0, selfcomp=False, Na=50, K=0, Tris=0, Mg=1.0, dNTPs=1.2, saltcorr=7)",
    "equalStrands": "Bio.SeqUtils.MeltingTemp.Tm_NN('ACGTTGACCAGGTATCAGCATTGCA', check=True, strict=True, nn_table=DNA_NN3, dnac1=125.0, dnac2=125.0, selfcomp=False, Na=50, K=0, Tris=0, Mg=1.0, dNTPs=1.2, saltcorr=7)"
   },
   "notes": "dNTPs exceed Mg2+: free Mg2+ 0.10 mM puts R at 0.200 (2004 formula), where total Mg2+ would give 0.632"
  },
  {
   "id": "T44",
   "input": {
    "sequence": "ATGCGTACCATGAGTCAGTTGACCAGTACGCATTGCAAGT",
    "name": "d40-mid",
    "length": 40,
    "gcPercent": 47.5,
    "selfComplementary": false,
    "oligoConcentration_nM": 250,
    "Na_mM": 1000,
    "K_mM": 0,
    "Tris_mM": 0,
    "Mg_mM": 2.5,
    "dNTPs_mM": 0.8,
    "complement": "perfect complement (c_seq=None), no dangling ends, no mismatches"
   },
   "expected": {
    "defaultModel": "primerInExcess",
    "primerInExcess": {
     "tm_C": 86.1719028578409,
     "concentrationTerm_nM": 250.0,
     "dnac1_nM": 250,
     "dnac2_nM": 0,
     "symmetryTerm": false
    },
    "equalStrands": {
     "tm_C": 85.06805568306874,
     "concentrationTerm_nM": 62.5,
     "dnac1_nM": 125.0,
     "dnac2_nM": 125.0,
     "symmetryTerm": false,
     "x": 4
    },
    "saltRegime": {
     "R": 0.04141558205580999,
     "freeMg_mM": 1.7152504370215302,
     "regimeId": "monovalent2004",
     "regime": "R < 0.22: monovalent (Owczarzy 2004) formula",
     "nearBoundary": false,
     "appliedCorrection": "owczarzy-2008",
     "note": "R, the regime and nearBoundary use free Mg2+; the regime decides the Tm where Owczarzy 2008 is applied (Mg2+ > 0).",
     "biopythonBranchVerified": true
    }
   },
   "oracleIntermediates": {
    "primerInExcess": {
     "deltaH_kcal_per_mol": -321.1999999999958,
     "deltaS_cal_per_K_mol": -863.6999999999883,
     "tmWithoutSaltCorrection_C": 86.1719028578409
    },
    "equalStrands": {
     "deltaH_kcal_per_mol": -321.20000000001534,
     "deltaS_cal_per_K_mol": -863.7000000000426,
     "tmWithoutSaltCorrection_C": 85.06805568306874
    },
    "saltCorrection": 0.0,
    "saltCorrectionApplies": "1/Tm(K) += corr",
    "derivation": "dH and dS recovered from two Biopython Tm_NN evaluations with saltcorr=0 at concentration terms k and 10k; they include initiation and, in equalStrands for a self-complementary oligo, the symmetry term."
   },
   "method": {
    "nn": "santalucia-1998",
    "nnTable": "Biopython DNA_NN3",
    "salt": "owczarzy-2008",
    "saltText": "Owczarzy et al. 2008: Mg2+ and mixed-cation correction, regime by R = sqrt([Mg2+]) / [Mon+]",
    "concentration": "primerInExcess by default; equalStrands as the named alternative"
   },
   "oracle": "Biopython Bio.SeqUtils.MeltingTemp.Tm_NN",
   "oracleVersion": "1.88",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (oligo-tm)",
   "call": {
    "primerInExcess": "Bio.SeqUtils.MeltingTemp.Tm_NN('ATGCGTACCATGAGTCAGTTGACCAGTACGCATTGCAAGT', check=True, strict=True, nn_table=DNA_NN3, dnac1=250, dnac2=0, selfcomp=False, Na=1000, K=0, Tris=0, Mg=2.5, dNTPs=0.8, saltcorr=7)",
    "equalStrands": "Bio.SeqUtils.MeltingTemp.Tm_NN('ATGCGTACCATGAGTCAGTTGACCAGTACGCATTGCAAGT', check=True, strict=True, nn_table=DNA_NN3, dnac1=125.0, dnac2=125.0, selfcomp=False, Na=1000, K=0, Tris=0, Mg=2.5, dNTPs=0.8, saltcorr=7)"
   },
   "notes": "dNTPs at 1 M Na+: R < 0.22"
  },
  {
   "id": "T45",
   "input": {
    "sequence": "GGGCTGGCAAGCCACGTTTGGTG",
    "name": "pGEX-5",
    "length": 23,
    "gcPercent": 65.21739130434783,
    "selfComplementary": false,
    "oligoConcentration_nM": 250,
    "Na_mM": 9,
    "K_mM": 0,
    "Tris_mM": 0,
    "Mg_mM": 3.0,
    "dNTPs_mM": 0.2,
    "complement": "perfect complement (c_seq=None), no dangling ends, no mismatches"
   },
   "expected": {
    "defaultModel": "primerInExcess",
    "primerInExcess": {
     "tm_C": 74.40219484124566,
     "concentrationTerm_nM": 250.0,
     "dnac1_nM": 250,
     "dnac2_nM": 0,
     "symmetryTerm": false
    },
    "equalStrands": {
     "tm_C": 72.6300613454602,
     "concentrationTerm_nM": 62.5,
     "dnac1_nM": 125.0,
     "dnac2_nM": 125.0,
     "symmetryTerm": false,
     "x": 4
    },
    "saltRegime": {
     "R": 5.881915147942838,
     "freeMg_mM": 2.802350990415553,
     "regimeId": "adjustedConstants",
     "regime": "0.22 <= R < 6: divalent formula with a, d and g adjusted for [Mon+]",
     "nearBoundary": true,
     "appliedCorrection": "owczarzy-2008",
     "note": "R, the regime and nearBoundary use free Mg2+; the regime decides the Tm where Owczarzy 2008 is applied (Mg2+ > 0).",
     "biopythonBranchVerified": true
    }
   },
   "oracleIntermediates": {
    "primerInExcess": {
     "deltaH_kcal_per_mol": -186.79999999999757,
     "deltaS_cal_per_K_mol": -494.79999999999296,
     "tmWithoutSaltCorrection_C": 82.65546669586064
    },
    "equalStrands": {
     "deltaH_kcal_per_mol": -186.80000000000086,
     "deltaS_cal_per_K_mol": -494.8000000000022,
     "tmWithoutSaltCorrection_C": 80.79839353315032
    },
    "saltCorrection": 6.674112127244555e-05,
    "saltCorrectionApplies": "1/Tm(K) += corr",
    "derivation": "dH and dS recovered from two Biopython Tm_NN evaluations with saltcorr=0 at concentration terms k and 10k; they include initiation and, in equalStrands for a self-complementary oligo, the symmetry term."
   },
   "method": {
    "nn": "santalucia-1998",
    "nnTable": "Biopython DNA_NN3",
    "salt": "owczarzy-2008",
    "saltText": "Owczarzy et al. 2008: Mg2+ and mixed-cation correction, regime by R = sqrt([Mg2+]) / [Mon+]",
    "concentration": "primerInExcess by default; equalStrands as the named alternative"
   },
   "oracle": "Biopython Bio.SeqUtils.MeltingTemp.Tm_NN",
   "oracleVersion": "1.88",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (oligo-tm)",
   "call": {
    "primerInExcess": "Bio.SeqUtils.MeltingTemp.Tm_NN('GGGCTGGCAAGCCACGTTTGGTG', check=True, strict=True, nn_table=DNA_NN3, dnac1=250, dnac2=0, selfcomp=False, Na=9, K=0, Tris=0, Mg=3.0, dNTPs=0.2, saltcorr=7)",
    "equalStrands": "Bio.SeqUtils.MeltingTemp.Tm_NN('GGGCTGGCAAGCCACGTTTGGTG', check=True, strict=True, nn_table=DNA_NN3, dnac1=125.0, dnac2=125.0, selfcomp=False, Na=9, K=0, Tris=0, Mg=3.0, dNTPs=0.2, saltcorr=7)"
   },
   "notes": "dNTPs near the R = 6 boundary: free Mg2+ gives R 5.88, total Mg2+ would give 6.09"
  }
 ],
 "refusals": [
  {
   "id": "R01",
   "input": {
    "raw": "TAATACGACNCACTATAGGG",
    "label": "ambiguity code N",
    "conditions": {
     "C": 250,
     "Na": 50,
     "Mg": 0,
     "dNTPs": 0,
     "saltcorr": 6
    }
   },
   "expected": {
    "refuse": true,
    "tm_C": null,
    "offendingCharacters": [
     {
      "character": "N",
      "position": 10
     }
    ],
    "reason": "not A, C, G or T: N at 10"
   },
   "mustNotEqual_C": {
    "primerInExcess": 47.560051509281266,
    "equalStrands": 45.56037638636343
   },
   "oracleBehaviour": {
    "checkTrue": "Biopython Tm_NN(check=True) returns the mustNotEqual_C values instead of refusing",
    "checkFalseStrict": {
     "primerInExcess": "check=False raises ValueError: no thermodynamic data for neighbors 'CN/GN' available",
     "equalStrands": "check=False raises ValueError: no thermodynamic data for neighbors 'CN/GN' available"
    }
   },
   "method": "refusal rule (CSO ruling, 6 October 2026); conditions as input.conditions",
   "oracle": "rule; Biopython Bio.SeqUtils.MeltingTemp.Tm_NN for the must-not-equal values",
   "oracleVersion": "1.88",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (oligo-tm, refusals)"
  },
  {
   "id": "R02",
   "input": {
    "raw": "GTAAAACGACGGCCAGY",
    "label": "ambiguity code Y",
    "conditions": {
     "C": 250,
     "Na": 50,
     "Mg": 0,
     "dNTPs": 0,
     "saltcorr": 6
    }
   },
   "expected": {
    "refuse": true,
    "tm_C": null,
    "offendingCharacters": [
     {
      "character": "Y",
      "position": 17
     }
    ],
    "reason": "not A, C, G or T: Y at 17"
   },
   "mustNotEqual_C": {
    "primerInExcess": 51.834278746752375,
    "equalStrands": 49.56667246710708
   },
   "oracleBehaviour": {
    "checkTrue": "Biopython Tm_NN(check=True) returns the mustNotEqual_C values instead of refusing",
    "checkFalseStrict": {
     "primerInExcess": "check=False raises ValueError: no thermodynamic data for neighbors 'GY/CR' available",
     "equalStrands": "check=False raises ValueError: no thermodynamic data for neighbors 'GY/CR' available"
    }
   },
   "method": "refusal rule (CSO ruling, 6 October 2026); conditions as input.conditions",
   "oracle": "rule; Biopython Bio.SeqUtils.MeltingTemp.Tm_NN for the must-not-equal values",
   "oracleVersion": "1.88",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (oligo-tm, refusals)"
  },
  {
   "id": "R03",
   "input": {
    "raw": "TAATACNACTCRCTATAGGG",
    "label": "two ambiguity codes (N, R)",
    "conditions": {
     "C": 250,
     "Na": 50,
     "Mg": 0,
     "dNTPs": 0,
     "saltcorr": 6
    }
   },
   "expected": {
    "refuse": true,
    "tm_C": null,
    "offendingCharacters": [
     {
      "character": "N",
      "position": 7
     },
     {
      "character": "R",
      "position": 12
     }
    ],
    "reason": "not A, C, G or T: N at 7, R at 12"
   },
   "mustNotEqual_C": {
    "primerInExcess": 43.4901168385955,
    "equalStrands": 41.37337842449455
   },
   "oracleBehaviour": {
    "checkTrue": "Biopython Tm_NN(check=True) returns the mustNotEqual_C values instead of refusing",
    "checkFalseStrict": {
     "primerInExcess": "check=False raises ValueError: no thermodynamic data for neighbors 'CN/GN' available",
     "equalStrands": "check=False raises ValueError: no thermodynamic data for neighbors 'CN/GN' available"
    }
   },
   "method": "refusal rule (CSO ruling, 6 October 2026); conditions as input.conditions",
   "oracle": "rule; Biopython Bio.SeqUtils.MeltingTemp.Tm_NN for the must-not-equal values",
   "oracleVersion": "1.88",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (oligo-tm, refusals)"
  },
  {
   "id": "R04",
   "input": {
    "raw": "TAATACGACICACTATAGGG",
    "label": "inosine: no inosine parameters in the engine",
    "conditions": {
     "C": 250,
     "Na": 50,
     "Mg": 0,
     "dNTPs": 0,
     "saltcorr": 6
    }
   },
   "expected": {
    "refuse": true,
    "tm_C": null,
    "offendingCharacters": [
     {
      "character": "I",
      "position": 10
     }
    ],
    "reason": "not A, C, G or T: I at 10"
   },
   "mustNotEqual_C": {
    "primerInExcess": 43.79542095597304,
    "equalStrands": 41.712919125324845
   },
   "oracleBehaviour": {
    "checkTrue": "Biopython Tm_NN(check=True) returns the mustNotEqual_C values instead of refusing",
    "checkFalseStrict": {
     "primerInExcess": "check=False returns 43.79542095597304 C",
     "equalStrands": "check=False returns 41.712919125324845 C"
    }
   },
   "method": "refusal rule (CSO ruling, 6 October 2026); conditions as input.conditions",
   "oracle": "rule; Biopython Bio.SeqUtils.MeltingTemp.Tm_NN for the must-not-equal values",
   "oracleVersion": "1.88",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (oligo-tm, refusals)"
  },
  {
   "id": "R05",
   "input": {
    "raw": "TAATACGACUCACTATAGGG",
    "label": "U in a DNA oligo",
    "conditions": {
     "C": 250,
     "Na": 50,
     "Mg": 0,
     "dNTPs": 0,
     "saltcorr": 6
    }
   },
   "expected": {
    "refuse": true,
    "tm_C": null,
    "offendingCharacters": [
     {
      "character": "U",
      "position": 10
     }
    ],
    "reason": "not A, C, G or T: U at 10"
   },
   "mustNotEqual_C": {
    "primerInExcess": 47.596985252370416,
    "equalStrands": 45.703750337130145
   },
   "oracleBehaviour": {
    "checkTrue": "Biopython Tm_NN(check=True) returns the mustNotEqual_C values instead of refusing",
    "checkFalseStrict": {
     "primerInExcess": "check=False raises ValueError: no thermodynamic data for neighbors 'CU/GA' available",
     "equalStrands": "check=False raises ValueError: no thermodynamic data for neighbors 'CU/GA' available"
    }
   },
   "method": "refusal rule (CSO ruling, 6 October 2026); conditions as input.conditions",
   "oracle": "rule; Biopython Bio.SeqUtils.MeltingTemp.Tm_NN for the must-not-equal values",
   "oracleVersion": "1.88",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (oligo-tm, refusals)"
  },
  {
   "id": "R06",
   "input": {
    "raw": "TAATACGAC-TCACTATAGGG",
    "label": "gap character",
    "conditions": {
     "C": 250,
     "Na": 50,
     "Mg": 0,
     "dNTPs": 0,
     "saltcorr": 6
    }
   },
   "expected": {
    "refuse": true,
    "tm_C": null,
    "offendingCharacters": [
     {
      "character": "-",
      "position": 10
     }
    ],
    "reason": "not A, C, G or T: - at 10"
   },
   "mustNotEqual_C": {
    "primerInExcess": 47.596985252370416,
    "equalStrands": 45.703750337130145
   },
   "oracleBehaviour": {
    "checkTrue": "Biopython Tm_NN(check=True) returns the mustNotEqual_C values instead of refusing",
    "checkFalseStrict": {
     "primerInExcess": "check=False raises ValueError: no thermodynamic data for neighbors 'C-/G-' available",
     "equalStrands": "check=False raises ValueError: no thermodynamic data for neighbors 'C-/G-' available"
    }
   },
   "method": "refusal rule (CSO ruling, 6 October 2026); conditions as input.conditions",
   "oracle": "rule; Biopython Bio.SeqUtils.MeltingTemp.Tm_NN for the must-not-equal values",
   "oracleVersion": "1.88",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (oligo-tm, refusals)"
  },
  {
   "id": "R07",
   "input": {
    "raw": "A",
    "label": "a 1-nt oligo has no nearest-neighbour pair",
    "conditions": {
     "C": 250,
     "Na": 50,
     "Mg": 0,
     "dNTPs": 0,
     "saltcorr": 6
    }
   },
   "expected": {
    "refuse": true,
    "tm_C": null,
    "offendingCharacters": [],
    "reason": "1 nt: a nearest-neighbour Tm needs at least 2 nt"
   },
   "mustNotEqual_C": {
    "primerInExcess": -491.4325050698026,
    "equalStrands": -466.1987740504893
   },
   "oracleBehaviour": {
    "checkTrue": "Biopython Tm_NN(check=True) returns the mustNotEqual_C values instead of refusing",
    "checkFalseStrict": {
     "primerInExcess": "check=False returns -491.4325050698026 C",
     "equalStrands": "check=False returns -466.1987740504893 C"
    }
   },
   "method": "refusal rule (CSO ruling, 6 October 2026); conditions as input.conditions",
   "oracle": "rule; Biopython Bio.SeqUtils.MeltingTemp.Tm_NN for the must-not-equal values",
   "oracleVersion": "1.88",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (oligo-tm, refusals)"
  }
 ],
 "acceptance": [
  {
   "id": "A01",
   "input": {
    "raw": "taatacgactcactataggg",
    "label": "lower case",
    "conditions": {
     "C": 250,
     "Na": 50,
     "Mg": 0,
     "dNTPs": 0,
     "saltcorr": 6
    }
   },
   "expected": {
    "cleanSequence": "TAATACGACTCACTATAGGG",
    "primerInExcess": {
     "tm_C": 47.596985252370416
    },
    "equalStrands": {
     "tm_C": 45.703750337130145
    }
   },
   "crossCheck": {
    "biopythonOnRawInput": {
     "primerInExcess": 47.596985252370416,
     "equalStrands": 45.703750337130145
    },
    "equal": true
   },
   "method": "acceptance rule (CSO ruling, 6 October 2026): lower case and line breaks give the clean sequence's Tm",
   "oracle": "Biopython Bio.SeqUtils.MeltingTemp.Tm_NN on the clean sequence",
   "oracleVersion": "1.88",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (oligo-tm, acceptance)"
  },
  {
   "id": "A02",
   "input": {
    "raw": "TAATACGACT\nCACTATAGGG",
    "label": "line break (LF)",
    "conditions": {
     "C": 250,
     "Na": 50,
     "Mg": 0,
     "dNTPs": 0,
     "saltcorr": 6
    }
   },
   "expected": {
    "cleanSequence": "TAATACGACTCACTATAGGG",
    "primerInExcess": {
     "tm_C": 47.596985252370416
    },
    "equalStrands": {
     "tm_C": 45.703750337130145
    }
   },
   "crossCheck": {
    "biopythonOnRawInput": {
     "primerInExcess": 47.596985252370416,
     "equalStrands": 45.703750337130145
    },
    "equal": true
   },
   "method": "acceptance rule (CSO ruling, 6 October 2026): lower case and line breaks give the clean sequence's Tm",
   "oracle": "Biopython Bio.SeqUtils.MeltingTemp.Tm_NN on the clean sequence",
   "oracleVersion": "1.88",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (oligo-tm, acceptance)"
  },
  {
   "id": "A03",
   "input": {
    "raw": "TAATACGACT\r\nCACTATAGGG",
    "label": "line break (CRLF)",
    "conditions": {
     "C": 250,
     "Na": 50,
     "Mg": 0,
     "dNTPs": 0,
     "saltcorr": 6
    }
   },
   "expected": {
    "cleanSequence": "TAATACGACTCACTATAGGG",
    "primerInExcess": {
     "tm_C": 47.596985252370416
    },
    "equalStrands": {
     "tm_C": 45.703750337130145
    }
   },
   "crossCheck": {
    "biopythonOnRawInput": {
     "primerInExcess": 47.596985252370416,
     "equalStrands": 45.703750337130145
    },
    "equal": true
   },
   "method": "acceptance rule (CSO ruling, 6 October 2026): lower case and line breaks give the clean sequence's Tm",
   "oracle": "Biopython Bio.SeqUtils.MeltingTemp.Tm_NN on the clean sequence",
   "oracleVersion": "1.88",
   "recordedOn": "2026-10-06",
   "source": "pipeline/sequence-toolkit/reference.py (oligo-tm, acceptance)"
  }
 ]
}
