Informations

Déterminer le tractus polypurine le plus long

Déterminer le tractus polypurine le plus long


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.

comment déterminer/trouver le tractus poly-purine le plus long dans n'importe quel génome et cela doit être sur le génome d'E. coli. est-ce de découvrir le tractus polypurine et ensuite de déterminer la chaîne la plus longue ? ou est-ce pour épisser les introns et les exons loin de l'ADN ? puisque le génome d'E. coli est long de 4,6 millions de BP, j'ai besoin d'aide pour le décomposer ?


Code Golf !

Ceci est mon script Python, évitant les regex et pas du tout embelli.

def gettract(strand): #if strand is 1 then replace C with T and split on T #else replace A with G and split on G if strand==1: print 'top strand purine tracts:' aseq=seq.replace( 'C','T') tracts=aseq.split('T') elif strand==2: print 'top strand pyrimidine tracts:' aseq=seq.replace('A','G') tracts=aseq. split('G') sortedtracts=sorted(tracts,key=len,reverse=True) pour i dans la plage(5) : print len(sortedtracts[i]), sortedtracts[i] f=open('ec_dna.txt' ,'r') l=f.readlines() print 'La séquence analysée est %s' % l[0][1:] #la ligne d'en-tête f.close() seq=".join([i.rstrip() for i in l[1:]]) print 'la longueur de la séquence est %i' %len(seq) print gettract(1) print gettract(2)

Et voici la sortie :

La séquence analysée est E. coli K-12 MG1655 U00096.2 (1 à 4639675 = 4639675 pb)

la longueur de la séquence est 4639675

les voies purines du brin supérieur :

28 AGAGAGAAAAGAAGAAGAGAAAAGAAAA

22 GGGGGAGAAAGGGGGGAAAAGG

20 AAAGAGGAAAGGGGGGGGGG

20 GAAGAGGAAAAGAAAGAAGG

20 AAAAAAAGAAGAGAAAAAAGA

faisceaux de pyrimidine du brin supérieur :

29 TTTTTCTCTTTCCCTTTTCCCTTCCCTCT

22 CCCTCCTCTTCTCTCCCTCCCC

21 TTCTCCTCCTTCTCTTTTCTT

21 TTTTTCTTCTCTCTTTTCCTC

21 CTCCCCTTTTCCCTTTTCTCC

Le tractus purique le plus long mesure 29 bases et se trouve sur le brin inférieur.

Ce script ne gère pas le problème que le E. coli le génome est une molécule circulaire, donc si le trajet le plus long était divisé à l'origine, il serait manqué - je laisse cela et obtenir les coordonnées du trajet le plus long comme exercice.


Pourquoi avez-vous besoin de faire cela ?

C'est assez simple avec les bons outils informatiques et une certaine connaissance de l'utilisation des expressions régulières, mais le fait que vous soyez intimidé par un fichier 4.6 Mbase me suggère que vous ne l'avez pas.

En utilisant une ancienne copie d'E.coli DH10B et de SeqBuilder de Lasergene, j'ai trouvé un tronçon de 29 C et T, donc à l'inverse, ce serait une poly-purine. Je ne vois pas d'étirement plus long dans mon fasta.


Puisque vous avez dit qu'une séquence Internet est assez bonne, je vais proposer une approche de programmation informatique. L'idée de base est d'entrer la séquence sous forme de chaîne de texte, puis de demander au programme de lire le texte, en gardant une trace de la longueur du faisceau polypurine actuel et du plus long rencontré jusqu'à présent. Quand c'est fait, il rapporte le plus long. Je ne sais pas si vous connaissez la programmation, alors je vais essayer d'écrire un exemple en C++ et de le poster. Il y a probablement d'autres programmes qui peuvent le faire, mais je ne les connais pas. Voici le code :

Main.cpp

#comprendre  #comprendre  // ce programme lit une séquence d'ADN à partir d'un fichier texte et recherche ensuite // la séquence polypurine la plus longue. Veuillez vous assurer qu'il n'y a pas de texte // non DNA dans le fichier texte. Veuillez appeler votre fichier texte "DNA.txt" et placez // dans le même dossier que ce programme. std::string base_complement(std::string in){ std::string return_me = ""; for(int i = 0; i < in.size(); i++){ if(in.c_str()[i] == 'a' || in.c_str()[i] == 'a'){ return_me += 'T'; } if(in.c_str()[i] == 'g' || in.c_str()[i] == 'G'){ return_me += 'C'; } if(in.c_str()[i] == 't' || in.c_str()[i] == 'T'){ return_me += 'A'; } if(in.c_str()[i] == 'c' || in.c_str()[i] == 'C'){ return_me += 'G'; } } return return_me; } int main(){ std::cout << "BIENVENUE SUR LE COMPTEUR POLYPURINE" << std::endl; std::cout << "ÉCRIT PAR SAM CROWLEY, [email protected]" << std::endl; std::cout << "LIRE L'ADN DANS DNA.txt ET SIGNALER L'ÉTIREMENT DE PURINE LE PLUS LONG" << std::endl; std::cout << std::endl; // ouvre le fichier et lit le contenu dans la chaîne std::string DNA; // cette chaîne contiendra toute la séquence d'ADN std::string line; // cela contiendra une ligne du fichier à la fois std::ifstream text_file("DNA.txt"); while(!text_file.eof()){ // lit le fichier jusqu'à la fin getline(text_file, line); // récupère une ligne à la fois dans la ligne string DNA += line; // ajoute cette ligne à la chaîne DNA } //std::cout << DNA << std::endl; // affiche la chaîne ADN juste pour vérifier int current_tract = 0; // longueur du tract actuel int longest_tract = 0; // longueur du plus long tract jusqu'à présent // true = sens brin, false = brin opposé bool tract = (DNA.c_str()[0] == 'a' || DNA.c_str()[0] == 'g '); car c = DNA.c_str()[0]; std::string purine = ""; std::string pyrimidine = ""; std::string plus long = ""; if(c == 'a' || c == 'g' || c == 'A' ||c == 'G'){ purine += c; }autre{ pyrimidine += c; } for(int i = 1; i < DNA.size(); i++){ // itérer à travers la chaîne d'ADN if(c == 'a' || c == 'g' || c == 'A' || c == 'G'){ if(DNA.c_str()[i] == 'a' || DNA.c_str()[i] == 'g' || DNA.c_str()[i] == 'A' ||ADN.c_str()[i] == 'G'){ purine += ADN.c_str()[i]; }else{ std::cout << purine << std::endl; if(purine.size() > longest.size()){ plus long = purine; } purine = ""; c = ADN.c_str()[i] ; pyrimidine += c; } }else{ if(DNA.c_str()[i] == 't' || DNA.c_str()[i] == 'c' || DNA.c_str()[i] == 'T' | | DNA.c_str()[i] == 'C'){ pyrimidine += DNA.c_str()[i]; }else{ std::cout << pyrimidine << std::endl; if(pyrimidine.size() > longest.size()){ le plus long = pyrimidine; } pyrimidine = ""; c = ADN.c_str()[i] ; purine += c; } } } if(purine.size() > 0){ std::cout << purine << std::endl; if(purine.size() > longest.size()){ plus long = purine; } } if(pyrimidine.size() > 0){ std::cout << pyrimidine << std::endl; if(pyrimidine.size() > longest.size()){ plus long = pyrimidine; le plus long = complément_base(le plus long); } } longest_tract = longest.size(); std::cout << std::endl; std::cout << "L'ÉTIREMENT POLYPURINE LE PLUS LONG EST " << longest_tract << " BASE LONGUE." << std::endl; std::cout << "L'ÉTIREMENT LE PLUS LONG EST" << le plus long << std::endl; }

Si vous utilisez Linux, placez le fichier dans un dossier et utilisez un terminal pour accéder à ce dossier, puis exécutez g++ main.cpp -o polypurine.exe Puis exécutez-le avec ./polypurine.exe

La séquence d'ADN va dans un fichier appelé DNA.txt dans le même dossier. Assurez-vous qu'il ne contient que a, t, g, c, donc supprimez toutes les données d'en-tête ou autres annotations. S'il contient un X, un N ou un autre symbole pour représenter des bases ambiguës, je ne sais pas ce qui se passera, mais les résultats peuvent ne pas être précis. J'oublie lequel est utilisé pour les purines et lequel pour les pyrimidines, mais si vous me le dites, je peux modifier le code pour le faire fonctionner avec des bases ambiguës.

Si vous utilisez Windows ou Mac, ce même code devrait fonctionner, mais sa compilation dans un programme de travail sera différente. Je ne programme pas sur ces machines, donc je ne sais pas comment faire fonctionner cela sur elles.

De plus, j'ai effectué un test sur l'ADNc du venin d'abeille PLA2 et j'ai obtenu le plus long tract purine de 17 bases. Je pense que je peux poster cet ADN ici :

ADNc de PLA2 de venin d'abeille

atgattatctatccgggtacactgtggtgtggtcatggtaataaaagcagcggtccgaacgaactgggtcgttttaaacataccgatgcatgttgtcgtacccatgatatgtgtccggatgttatgagtgccggtgaaagcaaacatggtctgaccaataccgcaagccatacccgtctgagctgtgattgtgatgataaattctatgattgcctgaaaaacagcgcagataccatcagcagctattttgttggcaaaatgtacttcaacctgatcgacaccaaatgctataaactggaacatccggttaccggttgtggtgaacgtaccgaaggtcgttgtctgcattataccgttgataaaagcaaaccgaaagtgtatcagtggtttgatctgcgcaaatatggatccatggataaagttttccggaattccgcaaaaaagaagagaaaggtagaagaccccaaggactttccttcagaattgctaagttttttgagtccaagcgcggccgca

Si vous utilisez ce programme pour des publications ou quoi que ce soit, faites-le moi savoir. Je l'ai mis ici pour que vous puissiez l'utiliser, mais j'aimerais au moins savoir s'il est utilisé.


Recherchez simplement /[AG/{30}]/ et si je ne le trouvais pas, je continuerais à laisser tomber le numéro jusqu'à ce qu'il atteigne - swbarnes2

Code pour la méthode de swbarnes2 (fonctionnera sur le terminal Linux, la console Mac et le terminal cygwin)

Habituellement, dans un fichier génomique, une seule séquence fasta représentera un chromosome. Dans E.coli, il n'y en aura qu'un. Vous devrez faire apparaître l'en-tête fasta (première ligne) lors de l'analyse de votre séquence. (En supposant que vous l'ayez fait).

Ce code ci-dessous trouvera tous les faisceaux polypurine d'une longueur donnée dans le génome. Fondamentalement, vous devez continuer à déposer la partie du début de la séquence à l'emplacement de la correspondance et refaire la recherche regex.

chat ecoli_genome.fa | tr -d "
" | awk '{for(i=30;i>=10;i--){ pp="[A|G]{"i"}" s=$0 while (match(s,pp)){ print substr(s , RSTART, RLENGTH) s=substr(s, RSTART+RLENGTH) } exit } }'

Les recherches Regex de type /pattern{N}/ peuvent ne pas fonctionner sur toutes les versions d'awk. Cela fonctionne dans gawk >=4.0 mais ne fonctionne pas dans mawk.

Cela chargera toute la séquence du génome dans la RAM (ce n'est pas énorme du tout). Si vous avez des limitations de RAM et que le fichier génome est vraiment énorme, vous pouvez lire en continu lettre par lettre (mais vous ne pouvez pas faire de recherche regex dans ce cas). La lecture de flux et l'expression régulière sont deux caractéristiques fortes deok.


Voir la vidéo: Calcul de dose - Exercice 13 DOUBLE DILUTION (Mai 2022).