Primer3 does not correctly pass the Mono and Di-valent salt corrections to the oligo secondary structure tm calculations.
To see this error; Run "ntthal <salt options> -a HAIRPIN" with the same salt, divalent-salt, dntp settings as in the list of parameters given to Primer3.
ntthal will correctly use the values given as command line options, but though primer3 reads these parameters
(primer3_boulder_main.c) and sets its global 'pa' structure, it still uses the default thal_args values for the self- any- and hairpin-
We've added a fix (hack?) on line 316 of read_boulder.c to put these values into the default structure in thal.c
Currently, the initialization of the thal_args data structure uses only the constants hard wired into thal.c and not the values
from the parameter file.
Our fix: 1) create static variables to hold the default constants in thal.c (rather than literal numbers in the source code)
2) Add functions to thal.c to set these variables.
3) Set these variables when the parameter values are read (this requires read_boulder.c to include thal.h and call functions(2)
when it parses PRIMER_SALT_CONC, PRIMER_DIVALENT_CONC, PRIMER_DNTP_CONC, PRIMER_DNA_CONC, etc)