diff --git a/src/libthermo/thermostats.c b/src/libthermo/thermostats.c new file mode 100644 index 0000000..ecd57d1 --- /dev/null +++ b/src/libthermo/thermostats.c @@ -0,0 +1,64 @@ +#include +#include +#include +#include +#include "thermostats.h" + +void getThermoProperties (ppair_t* pairs, size_t count, poptions_t options) +{ + size_t i, j; + uint32_t begin; + uint32_t end; + word_t w1; + word_t w2; + + char *sq; + char prmr[50]; + float mtemp; + + for (i = 0; i < count; i++) + { + w1 = pairs[i]->p1->word; + w2 = pairs[i]->p2->word; + + if (!pairs[i]->asdirect1) + w1=ecoComplementWord(w1,options->primer_length); + + if (!pairs[i]->asdirect2) + w2=ecoComplementWord(w2,options->primer_length); + + pairs[i]->p1temp = nparam_CalcSelfTM (options->pnparm, ecoUnhashWord(w1, options->primer_length), 0) - 273.0; + pairs[i]->p2temp = nparam_CalcSelfTM (options->pnparm, ecoUnhashWord(w2, options->primer_length), 0) - 273.0; + pairs[i]->p1mintemp = 100; + pairs[i]->p2mintemp = 100; + + for (j = 0; j < pairs[i]->pcr.ampcount; j++) + { + sq = pairs[i]->pcr.amplifias[j].sequence->SQ; + begin = pairs[i]->pcr.amplifias[j].begin - options->primer_length; + end = pairs[i]->pcr.amplifias[j].end + 1; + + memcpy (prmr, sq + begin, options->primer_length); + mtemp = nparam_CalcSelfTM (options->pnparm, prmr, options->primer_length) - 273.0; + if (mtemp < pairs[i]->p1mintemp) + pairs[i]->p1mintemp = mtemp; + //fprintf (stderr, "prmr1: %s\n", seqdb[seqid]->SQ); + memcpy (prmr, sq + end, options->primer_length); + mtemp = nparam_CalcSelfTM (options->pnparm, prmr, options->primer_length) - 273.0; + if (mtemp < pairs[i]->p2mintemp) + pairs[i]->p2mintemp = mtemp; + } + + if (w2 < w1) + { + mtemp = pairs[i]->p1temp; + pairs[i]->p1temp = pairs[i]->p2temp; + pairs[i]->p2temp = mtemp; + + mtemp = pairs[i]->p1mintemp; + pairs[i]->p1mintemp = pairs[i]->p2mintemp; + pairs[i]->p2mintemp = mtemp; + } + + } +} \ No newline at end of file