I experience big discrepancies when calculating melting temperature of RNA 7-mers with Biopython over values generated by a popular algorithm.
I tried the nearest neighbour algorithm with RNA and salt concentrations as described in a respective paper (thermodynamic table used as in paper below from: Freier et al 1986). Yet, the values largely differ (execute code below to see).
I tried all seven salt correction methods provided by Biopython, still I never get close to the values generated by siRNA design algorithm for the same 7-mers.
Can someone tell me how accurate Biopython's melting temperature nearest neighbour algorithm is? Especially for short oligomers like my 7-mers? Is there maybe something I am implementing wrong? Any suggestions?
Values derived from executing sample input: http://sidirect2.rnai.jp/
Tm is given for the seed duplex of the guide strand: bases 2-7
Literature:
Thermodynamic stability and Watson-Crick base pairing in the seed duplex are major determinants of the efficiency of the siRNA-based off-target effect
http://www.ncbi.nlm.nih.gov/pmc/articles/PMC2602766/pdf/gkn902.pdf
Python code (indentations might be messed up):
from Bio.Seq import Seq
from Bio.SeqUtils import MeltingTemp
test_list = [
('GGAUUUG', 21.5),
('CUCAUUG', 18.1),
('CAUAUUC', 8.7),
('UUUGAGU', 19.2),
('UUUUGAG', 12.2),
('GUUUCAA', 14.9),
('AGUUUCG', 19.7),
('GAAGUUU', 13.3)
]
for t in test_list:
myseq = Seq(t[0])
tm = MeltingTemp.Tm_NN(myseq, dnac1=100, Na=100, nn_table=MeltingTemp.RNA_NN1, saltcorr=7) # NN1 = Freier et al (1986)
tm = round(tm, 1) # round to one decimal
print 'BioPython Tm: ' + str(tm) + ' siDirect Tm: ' + str(t[1])
Question first asked at stack-exchange: http://stackoverflow.com/questions/30037939/biopython-big-discrepancy-calculating-rna-melting-temperature-over-literature
Also asked at: http://biology.stackexchange.com/questions/33032/biopython-big-discrepancy-calculating-rna-melting-temperature-over-literature
1 answer
I have written the recent version of MeltingTemp in Biopython's SeqUtils. I have extensively tested the Tm calculations against other programs like MELTING and Primer3Plus and other online Tm calculators with consistent results, thus I'm pretty confident that there is no gross error in the module. The simple answer in this case is: the calculation of siDirect is wrong.
One minor thing: Many programs calculate k as k = total Oligo/4. MeltingTemp uses k = Oligo1 - (Oligo2/2). Thus to mimic this behaviour, you have to use dnac1=50, dnac2=50 instead of dnac1=100.
And now the major thing: Oligo concentration is usually given in nanomolar. However, siDirect seems to use micromolar in its calculation!
Thus, you have to pass 1000-fold higher oligo concentrations to Biopython's MeltingTemp to get the same result as siDirect:
>>> from Bio.SeqUtils import MeltingTemp as mt
>>> print mt.Tm_NN('GGAUUUG', dnac1=50000, dnac2=50000, Na=100,
nn_table=mt.RNA_NN1, saltcorr=1)
20.1472140567
>>> print mt.Tm_NN('CUCAUUG', dnac1=50000, dnac2=50000, Na=100,
nn_table=mt.RNA_NN1, saltcorr=1)
18.1074422939
`
This is of course wrong if your primer concentration is 100 nM, but that's the result you get from siDirect.
Log in to answer this question.