Information

Biopython - Stora skillnader Beräknar RNA-smälttemperatur över litteratur

Biopython - Stora skillnader Beräknar RNA-smälttemperatur över litteratur


We are searching data for your request:

Forums and discussions:
Manuals and reference books:
Data from registers:
Wait the end of the search in all databases.
Upon completion, a link will appear to access the found materials.

Jag upplever stora avvikelser när jag räknar smält temperatur av RNA 7-merer med Biopython över värden genererade av en populär algoritm.

Jag provade den närmaste grannalgoritmen med RNA- och saltkoncentrationer som beskrivs i respektive papper (termodynamisk tabell används som i papper nedan från: Freier et al 1986). Ändå skiljer sig värdena till stor del (kör koden nedan för att se). Jag provade alla sju saltkorrigeringsmetoder som tillhandahålls av Biopython, men jag kommer aldrig i närheten av de värden som genereras av siRNA-designalgoritmen för samma 7-merer.

Kan någon berätta för mig hur exakt Biopythons smälttemperatur närmaste granne-algoritm är? Speciellt för korta oligomerer som mina 7-merer? Är det kanske något jag implementerar fel? Några förslag?

Värden som härrör från exekvering provinmatning: http://sidirect2.rnai.jp/ Tm ges för fröduplexet av styrsträng: baser 2-7

Litteratur: "Termodynamisk stabilitet och Watson-Crick-basparning i fröduplexet är viktiga bestämningsfaktorer för effektiviteten av den siRNA-baserade off-target-effekten" http://www.ncbi.nlm.nih.gov/pmc/articles/PMC2602766/pdf/gkn902.pdf

från Bio.Seq import Seq från 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) ] för t i 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) # runda till en decimal utskrift 'BioPython Tm: ' + str( tm) + ' siDirect Tm: ' + str(t[1]) # Output: >>> BioPython Tm: 10,1 siDirect Tm: 21,5 # GGAUUUG >>> BioPython Tm: 8,2 siDirect Tm: 18,1 # CUCAUUG >>> BioPython Tm : -2,0 siDirect Tm: 8,7 # CAUAUUC >>> BioPython Tm: 8,2 siDirect Tm: 19,2 # UUUGAGU >>> BioPython Tm: 1,3 siDirect Tm: 12,2 # UUUUGAG >>> BioPython Tm: 4. GUUDirect Tm: 4. > BioPython Tm: 9,0 siDirect Tm: 19,7 # AGUUUCG >>> BioPython Tm: 2,1 siDirect Tm: 13,3 # GAAGUUU

Frågan som ställdes först på stack-exchange: https://stackoverflow.com/questions/30037939/biopython-big-discrepancy-calculating-rna-melting-temperature-over-literature


Jämför Biopython MetlingTemp med andra miniräknare.

Jag har skrivit den senaste versionen av MeltingTemp i Biopythons SeqUtils. Jag har utförligt testat Tm-beräkningarna mot andra program som MELTING och Primer3Plus och andra online-Tm-räknare med konsekventa resultat, så jag är ganska säker på att det inte finns några grova fel i modulen. Det enkla svaret i detta fall är: beräkningen av siDirect är fel.

Källor till diskrepans.

En liten sak: Många program beräknar k som k = total Oligo/4. MeltingTemp använder k = Oligo1 - (Oligo2/2). För att härma detta beteende måste du alltså använda

dnac1=50, dnac2=50

istället för

dnac1=100

Och nu det viktigaste: Oligokoncentration ges vanligtvis i nanomolar. Men om du tittar på beräkningen i Perl-skriptet verkar siDirect använda mikromolar!

min $tm = ( 1000 * $dH / ( -10,8 + $dS + 1,987 * log(0,0001/4) ) - 273,15 + 16,6 * log(0,1)/log(10) )

Den kritiska delen här är:

log(0,0001/4)

som borde vara:

log(0,0000001/4)

Således måste du skicka 1000 gånger högre oligokoncentrationer till Biopythons MeltingTemp för att få samma resultat som siDirect:

>>> från Bio.SeqUtils importera MeltingTemp som 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

Detta är naturligtvis fel om din primerkoncentration är 100 nM, men det är resultatet du får från siDirect.


Jag fick precis ett PERL-kodavsnitt av forskaren bakom sidirect2 som gör det möjligt att beräkna Tm. Jag vet fortfarande inte källan till beräkningsavvikelsen eftersom termodynamiken är bortom mig.

Jag lägger upp koden för att avsluta frågan här. Burken nedan kan sparas i en .pl-fil och köras från skalet med respektive RNA-sekvens som ett strängargument.

Koda:

#!/usr/bin/perl # ===================== sub tm_RNA { # Beräknar Tm för RNA-RNA-hybrid med hjälp av närmaste granne-metod # # användning: $tm = tm_RNA('GGCUGCCAAGAACCUGCAGG'); min $seq = lc ($_[0] //") ; $seq =~ /^[augc]+$/ eller retur"; min $dH = deltaH_RNA($seq) eller retur"; min $dS = deltaS_RNA($seq) eller retur"; min $tm = ( 1000 * $dH / ( -10,8 + $dS + 1,987 * log(0,0001/4) ) - 273,15 + 16,6 * log(0,1)/log(10) ); return sprintf("%.2f", $tm) ; } ; # ===================== sub deltaH_RNA { # delta H parametrar my $seq = lc ($_[0] //") ; $seq =~ /^ [augc]+$/ eller retur"; min %rna_dH = ( 'aa' => -6.6, 'uu' => -6.6, 'au' => -5.7, 'ua' => -8.1, 'ca' => -10.5, 'ug' => -10.5, 'cu' => -7.6, 'ag' => -7.6, 'ga' => -13.3, 'uc' => -13.3, 'gu' => -10.2, 'ac' => -10.2 , 'cg' => -8.0, 'gc' => -14.2, 'gg' => -12.2, 'cc' => -12.2 ); min $sum_dH = 0 ; foreach (0... längd($seq) - 2){ min $dinukleotid = substr($seq, $_, 2) ; $sum_dH += $rna_dH{$dinukleotid} ; } returnera $summa_dH ; } ; # ===================== sub deltaS_RNA { # delta S parametrar my $seq = lc ($_[0] //") ; $seq =~ /^ [augc]+$/ eller retur"; min %rna_dS = ( 'aa' => -18.4, 'uu' => -18.4, 'au' => -15.5, 'ua' => -22.6, 'ca' => -27.8, 'ug' => -27.8, 'cu' => -19.2, 'ag' => -19.2, 'ga' => -35.5, 'uc' => -35.5, 'gu' => -26.2, 'ac' => -26.2 , 'cg' => -19.4, 'gc' => -34.9, 'gg' => -29.7, 'cc' => -29.7 ); min $sum_dS = 0 ; foreach (0… längd($seq) - 2){ min $dinukleotid = substr($seq, $_, 2) ; $sum_dS += $rna_dS{$dinukleotid} ; } returnera $sum_dS ; } ; # ===================== # Anrops huvudmetod: min $seq = shift; $tm = tm_RNA($seq) ; print $tm # returnerar värde till stdout


Titta på videon: Lect 2 Seq Object of Biopython (Februari 2023).