• Publicidad

Bioinformática: comparación de aminoácidos, por codones

Perl aplicado a la bioinformática

Bioinformática: comparación de aminoácidos, por codones

Notapor explorer » 2010-01-14 20:39 @902

Ejercicio a presentar en la convocatoria de Enero de 2010.
Informática - Biotecnología. Universidad de Salamanca.


Construir el programa pep2dna.pl que se ejecutará con la siguiente sintaxis:

perl pep2dna.pl fichin1 fichin2 fichout linesize

Funcionamiento
El programa pep2dna.pl recibirá como primer argumento un nombre de fichero (fichin1) que contendrá un número variable de secuencias de DNA, seguidas de su traducción a secuencia de aminoácidos, siguiendo el formato que puede verse en los ficheros de ejemplo en Studium, y que coincide con un conjunto de secuencias en formato FASTA concatenadas. Del análisis en conjunto de todos los registros FASTA que aparecen en ese fichero se obtendrá el codón que se utiliza más frecuentemente para codificar cada aminoácido.

Una vez obtenida esa información se leerá el contenido del fichero que se le pasa como segundo argumento (fichin2) que contendrá información biológica real extraída de una base de datos y correspondiente a una proteína. Este fichero contiene la secuencia de nucleótidos en formato FASTA, seguida de la secuencia de aminoácidos también en formato FASTA almacenada en dicha base de datos. La secuencia de aminoácidos presente en ese fichero se traducirá a una secuencia de nucleótidos, utilizando para cada aminoácido el codón correspondiente más frecuente que se ha encontrado en el paso anterior.

El resultado se escribirá en un fichero (fichout), compuesto por líneas del tamaño que se indica como cuarto argumento (linesize) y que será obligatoriamente múltiplo de 12. En cada línea aparecerá la secuencia almacenada en fichin2, junto con la traducción de proteína a nucleótido que se ha obtenido utilizando para ello el codón más frecuente encontrado en fichin1, y los puntos marcados con el símbolo "*" en que se ha producido una variación en la traducción. Para cada línea se antepondrá la posición de comienzo y se escribirán bloques de 12 en 12 nucleótidos con un espacio separando cada uno de ellos (ver fichero de salida en los ejemplos de la página web). Anteriormente se dará el número de nucleótidos que varían de la traducción de proteína a nucleótido hecha con los codones más frecuentes y la real encontrada en la base de datos.

El fichero de entrada es el siguiente:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
>DNA1
atggggttttctaaaatagcacttttttctttattcgcgctcttcggcct
tcctacctctcttgctaaaagcagtgaggaatggcgcgaccgtatcattt
accaggtcataactgacagatttgccgttgactctgataatacacccgat
tgctccttcgatgatagttcttattgcggtggtacatggagcggtattcg
ttctaaactcgactacatccaaggaatgggattcaacgccatctggatct
ctcctgtcgaaaagaatcttgagggttcttacggtagtgatggtgaagct
taccatggttattggaataccgatttcactcaattaaacgagcattttgg
ttcggaggatgatctcatcgatttaatcactgatatgcacaatcgtgaca
tgtggatcatgtttgacgcgttggccaactcaatggccattccaggaccc
accgataacatcagctactcgaatcttgtgccttttaatgactcatccta
cttccatccttactgttggattgactatggcagtaacaataatacagata
ttgaggattgttggactggtgatgacaatgtcatccttgccgatttagac
attgagtccacgaatgttgctgattatttgcatgaacatattcacgatat
ggtcgagcgttatcagattgatggaattcgtatcgatgcagttaaacaaa
tgaatcccgaatttttccccaactacacttctgctgctggtgtttttgct
attggcgaaatgtttagttacgatcccaatgtctcttgttcagtgcgtaa
ttatctcgacagcattaccagctatcccattcgtcaaggaattgaatttg
catttaattatactggtgctgcatttgaatatcttcaggagattgatacg
caattccagcaagcttgtgagggacaagatatgtcggttatcggaaactt
tttggagaaccatgaccttccccgttacacctctattaccaatgatacct
cacaagatattggcgccattgttttcctccttctgcatactggcattccc
attatttattatggagaagaacaacgcttgcctggtggctctgatacccc
ggaaaaccgtgccgccttgtggaattacggctatgacactgatgcaaatt
attaccaaaccattcgcactgctattgctctacgaaaacaagctataagt
gacagtgattcttggaccacagattctcactcttatttggactacgatct
gcgccatgctgtggtaagaaaaggtgatgttttgggagtttacacaaact
acgagtcaagttctgacaacgttacttatgatgtctcctctaattttgat
gatggtactgttttgcgcgaggttttgagcaatactactacgaccgttgg
ctcaagtggagcattgcacgttactgttgtaagcggtctacctcaggtct
attatcctgaggctagtttgacttcctttggaaacttcctaggaacggcc
acaagttattcttctgcctcggcgagctatccttctacttcgatgagtgc
ttcgctttcatctgtgcatacatcatctgccacatcaagctccaagtcta
gctctagctctagctccaggtccggctctagttcaagttcaagctccagg
tccggttcgacttcttctagcggctctagccataccatcacttctacttc
tcaaagtgtgcacacgagtggatcgtcgacatctactagtagtgtagcgg
tcacttccacggcatacagtagtagttctagctcgtcttcctcaagcagt
attgaaagttctgctaatgctgttcgtgtatctatccttggcgttgcagc
attcattgctatcgttctattcatttag
>PROT1
MGFSKIALFSLFALFGLPTSLAKSSEEWRDRIIYQVITDR
FAVDSDNTPDCSFDDSSYCGGTWSGIRSKLDYIQGMGFNA
IWISPVEKNLEGSYGSDGEAYHGYWNTDFTQLNEHFGSED
DLIDLITDMHNRDMWIMFDALANSMAIPGPTDNISYSNLV
PFNDSSYFHPYCWIDYGSNNNTDIEDCWTGDDNVILADLD
IESTNVADYLHEHIHDMVERYQIDGIRIDAVKQMNPEFFP
NYTSAAGVFAIGEMFSYDPNVSCSVRNYLDSITSYPIRQG
IEFAFNYTGAAFEYLQEIDTQFQQACEGQDMSVIGNFLEN
HDLPRYTSITNDTSQDIGAIVFLLLHTGIPIIYYGEEQRL
PGGSDTPENRAALWNYGYDTDANYYQTIRTAIALRKQAIS
DSDSWTTDSHSYLDYDLRHAVVRKGDVLGVYTNYESSSDN
VTYDVSSNFDDGTVLREVLSNTTTTVGSSGALHVTVVSGL
PQVYYPEASLTSFGNFLGTATSYSSASASYPSTSMSASLS
SVHTSSATSSSKSSSSSSSRSGSSSSSSSRSGSTSSSGSS
HTITSTSQSVHTSGSSTSTSSVAVTSTAYSSSSSSSSSSS
IESSANAVRVSILGVAAFIAIVLFI_
>DNA2
atgagcactacgaccgaaacagtgacatggagtcagtataaacctcagga
aactcaaagacgactttcacgttcaagcactatcactcctagtgtatcag
aatatcgatctggtttctcaaaaactgcttttggaaatattgaactggag
gaaattcctgataaacaaggcaacattacacgtgctacaagcaatctcga
aagcaattcatatccgaaagcattagatcctgatgcttgtcctcctaaac
gatcaattgcacttgtattactcaacaatctcatgtctgaaatgtctttg
actattgcgttgccaatttcggctgcatacactgaaattttgggaggtac
tgatgctttctcaggtcttgttattggtattcctactatgatttcactag
tttgcttatatccaatgcttcggtttgcgaatccaaagtctgccaatgga
tatacgctctactttcgaccactgattgtttcctgcatttctcaaataat
aggccatttactgtattcactagcgtaccgtgcacaatggctgtatttaa
ttcttatcggtcgtatgtgcagtggtgttggttttaccatgtttctgtat
cataaaacttacttgacagataaaaactttgttggacaaaatcgatccac
atttttggctactctaaacattttggcccagattttagggtccatggcag
gtgcctttctgggtggtatattagcgaaggcttctatgcacttgacagac
ccaatttggaatcaatatactgcaggatcttggtttatgctatttatctg
gatcgtatattcaatctttttgtctatcttttttaaagaagttcgggttg
gcaacactgcaaccaatgttcgaaaacccgaatccttcaccggaaaaacg
gctccactgtccttcaagcaaaagtttatgttgtgttttctgtctatggc
tgctttcatttctatctttaatgttgccggttatcaaaccagtgtaccta
tttacgctaaagcactatatcattacaatccttttcaatctggtaacttc
ctttctctttcatctttggttattgctccttttgtattttttagcacatt
tctatccaagtggttagaagataggcagatcatgctctacggattcatga
tgggtatagtggccttaatagttcatttagtattggatgctgttcacaaa
atccccgtacagccctattttgttttatattccataatgcaatttggatt
tagcgttggttcggctccgttggtgtctcttgctaccaagcagttgcatc
caaaataccatatgattactggtgtcgtagtacaagttggtatttcgatt
ggagaaacagttggctctatttgtggaggtgccatttttgatataactac
tgttggctttattgctatgaatttgggtattgccttactggtttttattc
agctcctctacttatggacctttattaaaaccaagactggttaa
>PROT2
MSTTTETVTWSQYKPQETQRRLSRSSTITPSVSEYRSGFS
KTAFGNIELEEIPDKQGNITRATSNLESNSYPKALDPDAC
PPKRSIALVLLNNLMSEMSLTIALPISAAYTEILGGTDAF
SGLVIGIPTMISLVCLYPMLRFANPKSANGYTLYFRPLIV
SCISQIIGHLLYSLAYRAQWLYLILIGRMCSGVGFTMFLY
HKTYLTDKNFVGQNRSTFLATLNILAQILGSMAGAFLGGI
LAKASMHLTDPIWNQYTAGSWFMLFIWIVYSIFLSIFFKE
VRVGNTATNVRKPESFTGKTAPLSFKQKFMLCFLSMAAFI
SIFNVAGYQTSVPIYAKALYHYNPFQSGNFLSLSSLVIAP
FVFFSTFLSKWLEDRQIMLYGFMMGIVALIVHLVLDAVHK
IPVQPYFVLYSIMQFGFSVGSAPLVSLATKQLHPKYHMIT
GVVVQVGISIGETVGSICGGAIFDITTVGFIAMNLGIALL
VFIQLLYLWTFIKTKTG_
>DNA3
atgagcatcagtattgaaacaattacgaaacgaaatcaatatagagttga
tcagcctcaaaggcagccttctcgcttgagtactgtagctagtatttcag
aataccaatccgattactcaaagactgtctttgaagaaattgaactagag
gtgatacctaacaaacagaatatctctacacggagttttagaaatgatgg
aaatgactcagatccgcaaacattggaccccgacgcgtacccacccaaga
gatctattgcatttgtcctgcttaacagtattctctcagatatgtccatg
tcaactgcgttaccaatttcggctgcatacactgaaattttgggaggtac
tgatgctttttcaggtcttgttattggtattcctactatgatttcactag
tttgcttatatccaatgcttcggtttgcgaatccaaagtctgccaatgga
tatacgctctactttcgaccactgattgtttcctgcatttctcaaataat
aggccatttactgtattcactagcgtaccgtgcacaatggctgtatttaa
ttcttatcggtcgtatgtgtaatggtgttggttttaccatgtttctgtac
cataaaaagtatttgacagataagcacttcgtggggcaaaatcgttctac
tttccttgcgacgcttaatattctcgcgcaaacagtaggtttcatggccg
gttcatttttaggtggtttgctggccaaggcatgcatgcacttgacaaac
ccaatttggaaccagtatactgttgggtcttggtttatgcttttcgcttg
gtgcatatacggtatcctattgtctatcttttttaaagaaattcgagccg
atggcaatgactcgtcagctcgaaagcccgaaaacttcaatggacaagcg
gttaagcttagctatacgcataaatttatgctagtcttccttagtatggt
tgcatttatctcatacttcaacatagcagggtatcaagctagcgttccca
tttatgctaaagagctttatcattacaatgcctttcaatctggtaacttt
ctttcactttctgctcttgtaatagctccacttgtgtttttgagcacgtt
tttgtctaaatgggcagaagatagagatatgatgctttatggctttatat
tgggaatactggctcttgttgtacatcttgttttagacgttcttcacaag
gttcgcgtgcagccatactttgttttgtactctgccatgcagtttgggtt
tagtatcggttccgcaccattaatttcacttgctactaaacaattgcatc
cgaaatatcatatccttgtcggcattattgttcaaattggtatatctgct
gcagatacagttggtgctatctgtggaggcgctatatttgatataaccac
agttggatttatcgcattaaatttgggtattgctgtactggtgtttattc
aattgttgttcttgtggaatagcatcaagactaagactggctaa
>PROT3
MSISIETITKRNQYRVDQPQRQPSRLSTVASISEYQSDYS
KTVFEEIELEVIPNKQNISTRSFRNDGNDSDPQTLDPDAY
PPKRSIAFVLLNSILSDMSMSTALPISAAYTEILGGTDAF
SGLVIGIPTMISLVCLYPMLRFANPKSANGYTLYFRPLIV
SCISQIIGHLLYSLAYRAQWLYLILIGRMCNGVGFTMFLY
HKKYLTDKHFVGQNRSTFLATLNILAQTVGFMAGSFLGGL
LAKACMHLTNPIWNQYTVGSWFMLFAWCIYGILLSIFFKE
IRADGNDSSARKPENFNGQAVKLSYTHKFMLVFLSMVAFI
SYFNIAGYQASVPIYAKELYHYNAFQSGNFLSLSALVIAP
LVFLSTFLSKWAEDRDMMLYGFILGILALVVHLVLDVLHK
VRVQPYFVLYSAMQFGFSIGSAPLISLATKQLHPKYHILV
GIIVQIGISAADTVGAICGGAIFDITTVGFIALNLGIAVL
VFIQLLFLWNSIKTKTG_
>DNA4
atgaagttttctaccgtagggtttttgttttcaacaattttattcaaaag
tgcgtttgcaggatggatggatacacacatgaaagatgaacatcacattg
ataagtacacagatgaatctttttttcgtcttcacgatttaggaaaaaag
ggatactggtcagatcaagatatacttagtttatatggattatttgaaaa
tgatgaggtcccattcgtcaaaaagaatgaggttttggttgatgttctaa
aaaaatgcgatccatcgggcaatcgccggataacacttgatgaatttctt
gcatttcgtaaaaatggaggagagttaacggattttggatttccagggca
ccatggtgatgaggaagaggaatttgaaatgcatcatgtggaaaaatatc
acccagctggcctcgatgaaccagatgaaaactggaatcatcctgaagat
atcgaacattttcaaaaacacgatgagatatttcatggtgataagaaacc
tgaggaacgacgcaaacattttgtaaaatacaataatatccctgacaagt
atcgtcgtgtgagcatttaa
>PROT4
MKFSTVGFLFSTILFKSAFAGWMDTHMKDEHHIDKYTDES
FFRLHDLGKKGYWSDQDILSLYGLFENDEVPFVKKNEVLV
DVLKKCDPSGNRRITLDEFLAFRKNGGELTDFGFPGHHGD
EEEEFEMHHVEKYHPAGLDEPDENWNHPEDIEHFQKHDEI
FHGDKKPEERRKHFVKYNNIPDKYRRVSI_
>DNA5
atgggccgcgatatttacaaggacgagacattgacgatccctgagggcgt
ttcagttgacatcaaggctcgtttggtgactgtaaaaggccctcgtggtg
ttttgaagcaaaacttgcgccgtgtggatattgagttgaagaagcaaggc
aacactatcaagtttattgtctggcatggctctcgtaagcataatgcttg
cattcgtaccgcctattccatcatcaataacatgatcattggcgttaccc
aaggtttccgctacaagatgcgtcttgtctatgctcactttcccatcaac
atcaatttgactgagaacggaaccgttgttgagatccgtaactttttggg
cgaacgtattactcgtgtcatcaagtgtttgcctggcgttaccgtttcca
tttcttctgccgtcaaggatgagattataattgaaggtaactccttggag
aatgtttctcaatccgctgccaacatcaagcaaatttgcaatgtccgcaa
caaggatatccgtaagttcttggatggtatctatgtttctgaacgtggta
acatcgaggagttggaatag
>PROT5
MGRDIYKDETLTIPEGVSVDIKARLVTVKGPRGVLKQNLR
RVDIELKKQGNTIKFIVWHGSRKHNACIRTAYSIINNMII
GVTQGFRYKMRLVYAHFPININLTENGTVVEIRNFLGERI
TRVIKCLPGVTVSISSAVKDEIIIEGNSLENVSQSAANIK
QICNVRNKDIRKFLDGIYVSERGNIEELE_
>DNA6
atggatgcacaggatgaagataatccatttacgaatcttgaaactactgt
agacgtcacagaagaaattcaagattggagatttttatcaaatgtcgaaa
aagaccaagggacatacactatcccaaaacgtggacaaaaagactttgaa
ccagatggcaccaataagcaacattctgctctcgacttgagcaggaaggc
gatgtttgatgccctttcagtggagagattaatatcggccaaacatgcaa
taatagctacttggaatgcccaaaatgggatgtcttgtgttgaaaaggca
catggacctttgtttaaaaccatgggtactgctgactctcaaaatcgcat
gtggttacttccagaggagactttgtatcttgttgaacgtggatcgatgg
aatgctggtcagaagaaggattgccaatgagtttgcaagcagtttactca
gcctctattcctttatgtggtagcttagaaaattatcttgtttatgctca
tttacggagatgtggtttttcggttatacgttcaaacctagttccagtaa
aagaagatgaatatcgatgcgattcgaaaattatgaatttcaaggattta
ttgtttttaggattgggaaaggcttcacaaatattacaaacatttaactt
tcggaaactagcttttccattttcaaagcggaggaggcagtctatcctct
tacatgatacattttatacatacgaagaagtgtatcatgatttgcaaatt
gtccgcggttatgttccaatcgcttgtaatcttataacatcttcagattc
attatttcaaatcacatttcacgcatacaaaccttcagcttcattcaaaa
aatcggccttatcagagcctgattttaggatatgtgtggttagctctcag
gatacattattacctactatttttgagattgatgcgcttttttcaagtac
tcctcttcgacaaaacatgccacagcatatgtttcaaagactaaaggaag
ggtacagaaacattattattgcaattgtagattatggagttataagctac
attcggctatcggatgtttgttttgaagaaaaagtttatacagacttctc
taaaaagggatctaaaaggaaaagggtgagtaaaaaatttcaacaattgg
tctaa
>PROT6
MDAQDEDNPFTNLETTVDVTEEIQDWRFLSNVEKDQGTYT
IPKRGQKDFEPDGTNKQHSALDLSRKAMFDALSVERLISA
KHAIIATWNAQNGMSCVEKAHGPLFKTMGTADSQNRMWLL
PEETLYLVERGSMECWSEEGLPMSLQAVYSASIPLCGSLE
NYLVYAHLRRCGFSVIRSNLVPVKEDEYRCDSKIMNFKDL
LFLGLGKASQILQTFNFRKLAFPFSKRRRQSILLHDTFYT
YEEVYHDLQIVRGYVPIACNLITSSDSLFQITFHAYKPSA
SFKKSALSEPDFRICVVSSQDTLLPTIFEIDALFSSTPLR
QNMPQHMFQRLKEGYRNIIIAIVDYGVISYIRLSDVCFEE
KVYTDFSKKGSKRKRVSKKFQQLV_
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Ejemplo del fichero segundo, con la información de la proteína:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
>DNA1
atgcctaccattctcgtcatcaatccaaactcttccaccttcatcacaac
atccatggaagaaaaactcgttcccctagtgccttcagatgtaaagttgc
gctttctaacttgtcctcaacccggtgctgctgtcatcgactccatcaca
gaggcaaccttgacagctgctctagtcttccaagccctaactcctagtgt
cttggatggtgtcgatgctatagctgttgcctgttattcccccactcctc
tagtcgacatgattcgtgagtcatttgctttaccctgcatgggcattgtg
caagcgtctgtcctcagtgccttatcggttggtcagcgcatcggcatcct
tacaagtacatatcgttccgaatgtttgctttacgaattactcgattctt
ttggtgtttcgcgcactcgagtggccgccattgcttctacaggtcgcaca
gttttgcaactttcgcaaatgccttcacaagagcgtgaaacccttcttgt
ccaaaaggcccaagaactggcaaacacaaagggtgcagatgtcatttgtt
taggtggtgctgctttagcagctattcgtgatcagattcaggttgccgta
ggtcccaatattcccatcattgatggtgtacatgcggctgttgagttact
tgctggcctagctcgtcaaaatcttcatacatcaaagtttggcatctata
cgtatccataa
>PROT1
MPTILVINPNSSTFITTSMEEKLVPLVPSDVKLRFLTCPQ
PGAAVIDSITEATLTAALVFQALTPSVLDGVDAIAVACYS
PTPLVDMIRESFALPCMGIVQASVLSALSVGQRIGILTST
YRSECLLYELLDSFGVSRTRVAAIASTGRTVLQLSQMPSQ
ERETLLVQKAQELANTKGADVICLGGAALAAIRDQIQVAV
GPNIPIIDGVHAAVELLAGLARQNLHTSKFGIYTYP_
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Con los dos ficheros anteriores, la salida sería así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
En total hay 147 cambios

   1 ATGCCTACCATT CTCGTCATCAAT CCAAACTCTTCC ACCTTCATCACA
   1         *    * *  *  *      *  *     *   *  *  *  *
   1 ATGCCTACTATT TTGGTTATTAAT CCTAATTCTTCT ACTTTTATTACT

  49 ACATCCATGGAA GAAAAACTCGTT CCCCTAGTGCCT TCAGATGTAAAG
  49   *  *             * *      ** *  *      *     *  *
  49 ACTTCTATGGAA GAAAAATTGGTT CCTTTGGTTCCT TCTGATGTTAAA

  97 TTGCGCTTTCTA ACTTGTCCTCAA CCCGGTGCTGCT GTCATCGACTCC
  97      *   * *                *            *  *  *  *
  97 TTGCGTTTTTTG ACTTGTCCTCAA CCTGGTGCTGCT GTTATTGATTCT

 145 ATCACAGAGGCA ACCTTGACAGCT GCTCTAGTCTTC CAAGCCCTAACT
 145   *  *  *  *   *     *       * *  *  *      ** *    
 145 ATTACTGAAGCT ACTTTGACTGCT GCTTTGGTTTTT CAAGCTTTGACT

 193 CCTAGTGTCTTG GATGGTGTCGAT GCTATAGCTGTT GCCTGTTATTCC
 193    **   *            *         *         *        *
 193 CCTTCTGTTTTG GATGGTGTTGAT GCTATTGCTGTT GCTTGTTATTCT

 241 CCCACTCCTCTA GTCGACATGATT CGTGAGTCATTT GCTTTACCCTGC
 241   *      * *   *  *            *  *         *  *  *
 241 CCTACTCCTTTG GTTGATATGATT CGTGAATCTTTT GCTTTGCCTTGT

 289 ATGGGCATTGTG CAAGCGTCTGTC CTCAGTGCCTTA TCGGTTGGTCAG
 289      *     *      *     * * ***   *  *   *        *
 289 ATGGGTATTGTT CAAGCTTCTGTT TTGTCTGCTTTG TCTGTTGGTCAA

 337 CGCATCGGCATC CTTACAAGTACA TATCGTTCCGAA TGTTTGCTTTAC
 337   *  *  *  * * *  ***   *         *          * *  *
 337 CGTATTGGTATT TTGACTTCTACT TATCGTTCTGAA TGTTTGTTGTAT

 385 GAATTACTCGAT TCTTTTGGTGTT TCGCGCACTCGA GTGGCCGCCATT
 385      ** *                   *  *     *   *  *  *    
 385 GAATTGTTGGAT TCTTTTGGTGTT TCTCGTACTCGT GTTGCTGCTATT

 433 GCTTCTACAGGT CGCACAGTTTTG CAACTTTCGCAA ATGCCTTCACAA
 433         *      *  *          * *  *            *    
 433 GCTTCTACTGGT CGTACTGTTTTG CAATTGTCTCAA ATGCCTTCTCAA

 481 GAGCGTGAAACC CTTCTTGTCCAA AAGGCCCAAGAA CTGGCAAACACA
 481   *        * * ** *  *      *  *       *    *  *  *
 481 GAACGTGAAACT TTGTTGGTTCAA AAAGCTCAAGAA TTGGCTAATACT

 529 AAGGGTGCAGAT GTCATTTGTTTA GGTGGTGCTGCT TTAGCAGCTATT
 529   *     *      *        *                *  *      
 529 AAAGGTGCTGAT GTTATTTGTTTG GGTGGTGCTGCT TTGGCTGCTATT

 577 CGTGATCAGATT CAGGTTGCCGTA GGTCCCAATATT CCCATCATTGAT
 577         *      *     *  *      *         *  *      
 577 CGTGATCAAATT CAAGTTGCTGTT GGTCCTAATATT CCTATTATTGAT

 625 GGTGTACATGCG GCTGTTGAGTTA CTTGCTGGCCTA GCTCGTCAAAAT
 625      *     *         *  * * *     ** *              
 625 GGTGTTCATGCT GCTGTTGAATTG TTGGCTGGTTTG GCTCGTCAAAAT

 673 CTTCATACATCA AAGTTTGGCATC TATACGTATCCA TAA
 673 * *     *  *   *     *  *      *     *    
 673 TTGCATACTTCT AAATTTGGTATT TATACTTATCCT TAA
 
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Límite de plazo de entrega: 15 de enero de 2010.
Defensa del programa: 18 de enero de 2010.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Publicidad

Re: Bioinformática: comparación de aminoácidos, por codones

Notapor explorer » 2010-01-14 21:29 @937

Nota: La siguiente solución del problema no es conforme a los requerimientos de la asignatura, en la que se pide que las subrutinas deben ir en un módulo aparte del programa.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. #
  3. # Programa
  4. #   pep2dna.pl
  5. #
  6. # Autor
  7. #   Joaquín Ferrero
  8. #
  9. # Versión
  10. #   20100130 : Cambios cosméticos y arreglo de errores de salida
  11. #   20091231 : Primera versión
  12. #
  13. # Entrada
  14. #   Ninguna.
  15. #
  16. # Salida
  17. #   Ninguna.
  18. #   El estado del resultado será:
  19. #       0 : no hubo errores
  20. #       1 : hubo algún error
  21. #
  22. # Argumentos
  23. #   <fichero1> :  Fichero FASTA con secuencias de donde sacar estadísticas de
  24. #                 uso del codón más frecuente para cada aminoácido
  25. #   <fichero2> :  Fichero FASTA de una proteína
  26. #   <salida>   :  Fichero de salida del informe
  27. #   <ancho>    :  Indica el ancho de la salida del informe
  28. #
  29. # Ejemplo
  30. #
  31. #   pep2dna.pl <fichero1> <fichero2> <salida> <ancho>
  32. #
  33. # Errores
  34. #   El programa termina inmediatamente si:
  35. #       * Los ficheros no pueden ser leídos
  36. #       * El fichero de salida no puede ser creado o no se puede escribir en él
  37. #       * Los ficheros no están bien conformados. Deben cumplir:
  38. #           + Número par de secuencias
  39. #           + De cada par, la primera es la secuencia de nucleótidos
  40. #           + la segunda, la misma secuencia, pero codificada en aminoácidos
  41. #
  42. # Descripción
  43. #   Del primer fichero pasado como argumento se extraerá una estadística,
  44. #   consistente en saber qué codones codifican con más frecuencia a sus
  45. #   correspondientes aminoácidos.
  46. #
  47. #   Del segundo fichero se extraerá una secuencia, correspondiente a una
  48. #   proteína. De la parte de aminoácidos, hay que crear una nueva secuencia de
  49. #   nucleótidos, pero usando los codones que con más frecuencia aparecieron en
  50. #   el primer fichero.
  51. #
  52. #   De la secuencia generada, compararla con la secuencia de nucleótidos de la
  53. #   proteína, marcando las diferencias con un '*'.
  54. #
  55. #   En el fichero de salida, hay que indicar:
  56. #
  57. #   Primero, informar del número de diferencias que hay entre la secuencia de
  58. #   nucleótidos de la proteína y la generada.
  59. #
  60. #   Segundo, mostrar las secuencias de nucleótidos de la proteína, diferencias,
  61. #   y generada, en líneas de ancho indicadas por el argumento <ancho>.
  62. #
  63. #   Las secuencias aparecerán en conjuntos de 3 líneas, separadas por una línea
  64. #   en blanco. Cada uno de esos conjuntos estarán formados por:
  65. #   Una línea con parte de la secuencia de nucleótidos de la proteína.
  66. #   Una línea con la diferencia entre las dos secuencias.
  67. #   Una línea con parte de la secuencia de nucleótidos generada.
  68. #   Las líneas van precedidas por el número de posición de las partes dentro de
  69. #   la secuencia, como un número entero de 4 posiciones.
  70. #
  71. #   Entre el número de posición y cada 12 nucleótidos (valor fijo), insertar un
  72. #   espacio en blanco.
  73. #
  74. #   Ejemplo:
  75. #      +--------------------------------------------------------
  76. #      |En total hay 147 cambios
  77. #      |
  78. #      |   1 ATGCCTACCATT CTCGTCATCAAT CCAAACTCTTCC ACCTTCATCACA
  79. #      |   1         *    * *  *  *      *  *     *   *  *  *  *
  80. #      |   1 ATGCCTACTATT TTGGTTATTAAT CCTAATTCTTCT ACTTTTATTACT
  81. #      |
  82. #      |  49 ACATCCATGGAA GAAAAACTCGTT CCCCTAGTGCCT TCAGATGTAAAG
  83. #      |  49   *  *             * *      ** *  *      *     *  *
  84. #      |  49 ACTTCTATGGAA GAAAAATTGGTT CCTTTGGTTCCT TCTGATGTTAAA
  85. #      |
  86. #
  87. #
  88. # Errores del programa no resueltos
  89. #   El programa fallará si las secuencias del primer fichero de entrada no
  90. #   codifican a todos los aminoácidos presentes más tarde en la secuencia de la
  91. #   proteína.
  92. #
  93. #   Una opción sería la de terminar el programa con un mensaje de error, en caso
  94. #   de que no dispongamos de todos los aminoácidos.
  95. #
  96. #   Una posible solución sería la de asignar codones típicos a esos aminoácidos.
  97. #
  98. #   De momento, ahora lo que se hace es crear un codón ficticio: 'EEE'.
  99. #
  100. ################################################################################
  101.  
  102.  
  103. ### Pragmas de desarrollo ######################################################
  104. #use strict;
  105. #use warnings;
  106. #use diagnostics;
  107.  
  108. ### Pragmas de funcionamiento ##################################################
  109. use integer;
  110.  
  111.  
  112. ### Módulos ####################################################################
  113.  
  114.  
  115.  
  116. ### Constantes #################################################################
  117. # Ancho de los bloques de nucleótidos a mostrar
  118. my $ANCHOSEQ = 12;
  119.  
  120. # Diccionario codones -> aminoácido
  121. my %AMINOACIDO = (
  122.     'AAA' => 'K',    # Lisina
  123.     'AAC' => 'N',    # Asparagina
  124.     'AAG' => 'K',    # Lisina
  125.     'AAT' => 'N',    # Asparagina
  126.     'ACA' => 'T',    # Treonina
  127.     'ACC' => 'T',    # Treonina
  128.     'ACG' => 'T',    # Treonina
  129.     'ACT' => 'T',    # Treonina
  130.     'AGA' => 'R',    # Arginina
  131.     'AGC' => 'S',    # Serina
  132.     'AGG' => 'R',    # Arginina
  133.     'AGT' => 'S',    # Serina
  134.     'ATA' => 'I',    # Isoleucina
  135.     'ATC' => 'I',    # Isoleucina
  136.     'ATG' => 'M',    # Metionina
  137.     'ATT' => 'I',    # Isoleucina
  138.     'CAA' => 'Q',    # Glutamina
  139.     'CAC' => 'H',    # Histidina
  140.     'CAG' => 'Q',    # Glutamina
  141.     'CAT' => 'H',    # Histidina
  142.     'CCA' => 'P',    # Prolina
  143.     'CCC' => 'P',    # Prolina
  144.     'CCG' => 'P',    # Prolina
  145.     'CCT' => 'P',    # Prolina
  146.     'CGA' => 'R',    # Arginina
  147.     'CGC' => 'R',    # Arginina
  148.     'CGG' => 'R',    # Arginina
  149.     'CGT' => 'R',    # Arginina
  150.     'CTA' => 'L',    # Leucina
  151.     'CTC' => 'L',    # Leucina
  152.     'CTG' => 'L',    # Leucina
  153.     'CTT' => 'L',    # Leucina
  154.     'GAA' => 'E',    # Ácido glutámico
  155.     'GAC' => 'D',    # Ácido aspártico
  156.     'GAG' => 'E',    # Ácido glutámico
  157.     'GAT' => 'D',    # Ácido aspártico
  158.     'GCA' => 'A',    # Alanina
  159.     'GCC' => 'A',    # Alanina
  160.     'GCG' => 'A',    # Alanina
  161.     'GCT' => 'A',    # Alanina
  162.     'GGA' => 'G',    # Glicina
  163.     'GGC' => 'G',    # Glicina
  164.     'GGG' => 'G',    # Glicina
  165.     'GGT' => 'G',    # Glicina
  166.     'GTA' => 'V',    # Valina
  167.     'GTC' => 'V',    # Valina
  168.     'GTG' => 'V',    # Valina
  169.     'GTT' => 'V',    # Valina
  170.     'TAA' => '_',    # Stop
  171.     'TAC' => 'Y',    # Tirosina
  172.     'TAG' => '_',    # Stop
  173.     'TAT' => 'Y',    # Tirosina
  174.     'TCA' => 'S',    # Serina
  175.     'TCC' => 'S',    # Serina
  176.     'TCG' => 'S',    # Serina
  177.     'TCT' => 'S',    # Serina
  178.     'TGA' => '_',    # Stop
  179.     'TGC' => 'C',    # Cisteina
  180.     'TGG' => 'W',    # Triptófano
  181.     'TGT' => 'C',    # Cisteina
  182.     'TTA' => 'L',    # Leucina
  183.     'TTC' => 'F',    # Fenilalanina
  184.     'TTG' => 'L',    # Leucina
  185.     'TTT' => 'F',    # Fenilalanina
  186. );
  187.  
  188.  
  189.  
  190. ### Variables ##################################################################
  191. my $fichero1;                           # Fichero para estadísticas
  192. my $fichero2;                           # Fichero de la proteína
  193. my $fichero_salida;                     # Fichero de salida con el informe
  194. my $ancho;                              # Ancho de salida del informe
  195.  
  196. my %codones_populares;                  # Qué codones son más frecuentes,
  197.                                         # por cada aminoácido
  198.  
  199.  
  200. ### Argumentos de entrada ######################################################
  201. @ARGV == 4 or die "Uso: $0 <fichero 1> <fichero 2> <fichero salida> <ancho>\n";
  202.  
  203. ($fichero1, $fichero2, $fichero_salida, $ancho) = @ARGV;
  204.  
  205. $ancho % $ANCHOSEQ == 0 or die "ERROR: El ancho no es múltiplo de $ANCHOSEQ\n";
  206. -f $fichero1            or die "ERROR: No encuentro el primer fichero\n";
  207. -f $fichero2            or die "ERROR: No encuentro el segundo fichero\n";
  208.  
  209.  
  210.  
  211. ### Leer fichero 1 #############################################################
  212. my ($secuencia_nucleotidos,             # Secuencias de nucleótidos
  213.     $secuencia_aminoacidos)             # Secuencias de aminoácidos
  214.     = leer_fichero_FASTA($fichero1)     # Leemos el primer fichero
  215.     ;
  216.  
  217.  
  218. # Los codones son conjuntos de tres nucleótidos.
  219. # Pasamos los codones, desde una secuencia en una cadena de caracteres, a un arreglo
  220. my @secuencia_codones = $secuencia_nucleotidos =~ /(...)/g;
  221.  
  222.  
  223. # La secuencia de aminoácidos consta de letras, individuales
  224. my @secuencia_aminoacidos = split //, $secuencia_aminoacidos;
  225.  
  226.  
  227. ### Cálculo del codón que más veces codifica cada aminoácido ###################
  228. #
  229. # Guardaremos las estadísticas en una estructura de un hash de hash:
  230. #
  231. #   $codones_populares{aminoacido}->{codón que lo codifica} = veces que lo hace
  232. #
  233. for (my $i = 0; $i < @secuencia_codones; $i++ ) {
  234.     my $codon_leido      = $secuencia_codones    [$i];
  235.     my $aminoacido_leido = $secuencia_aminoacidos[$i] || '';
  236.  
  237.     # Comprobamos que los codones leídos corresponden a sus aminoácidos
  238. #    if ($AMINOACIDO{$codon_leido} ne $aminoacido_leido) {
  239. #        die "ERROR: No corresponde la secuencia de codones con la de aminoácidos.\n"
  240. #          . "ERROR: Fallo en el codón [$codon_leido] correspondiente al aminoácido de la posición [$i].\n"
  241. #          . "ERROR: Leído [$aminoacido_leido]. Debería ser [$AMINOACIDO{$codon_leido}]\n"
  242. #          ;
  243. #    }
  244.  
  245.     # Estadística:
  246.     # Sumamos una aparición más al codón que codifica al aminoácido
  247.     $codones_populares{$aminoacido_leido}{$codon_leido}++;
  248. }
  249.  
  250.  
  251. ### Filtrado ###################################################################
  252. #
  253. # Nos quedamos con el codón más popular, por cada aminoácido
  254. #
  255. # Modificamos la estructura del propio hash, para que guarde solo la del codón
  256. # más popular (la de uso más frecuente)
  257. #
  258. for my $aminoacido (keys %codones_populares) {  # Para todos los encontrados
  259.  
  260.     my $mas_popular;                            # Nombre del codón más frecuente
  261.     my $record = 0;                             # Número de veces que aparece
  262.  
  263.                                                 # Vemos todos los codones
  264.     while (my ($codon, $veces) = each %{$codones_populares{$aminoacido}}) {
  265.  
  266.         if ($veces > $record) {                 # Encontrado uno más popular
  267.             $mas_popular = $codon;
  268.             $record      = $veces;
  269.         }
  270.     }
  271.  
  272.     # Modificamos la estructura, a un simple hash,
  273.     # guardando solo el nombre del codón con más frecuencia
  274.     $codones_populares{$aminoacido} = $mas_popular;
  275. }
  276.  
  277.  
  278.  
  279. ### Leer fichero 2 #############################################################
  280. my ($proteina_nucleotidos,                      # Secuencia de nucleótidos
  281.     $proteina_aminoacidos)                      # Correspondientes aminoácidos
  282.     = leer_fichero_FASTA($fichero2)             # Leer del segundo fichero
  283.     ;
  284.  
  285.  
  286. ### Obtención de la proteína usando los codones más populares ##################
  287. my $proteina_sintetica
  288.     = join '',                                  # Unimos los codones
  289.       map  { $codones_populares{$_} || 'EEE' }  # mas populares que corresponden
  290.       split //,                                 # a cada
  291.       $proteina_aminoacidos                     # aminoácido
  292.     ;
  293.  
  294.  
  295. ### Creación de la secuencia de diferencias entre las dos ######################
  296. #
  297. # Un poco de matemáticas: hacemos la operación OR-exclusivo entre las dos.
  298. # El resultado es \0 (cero) en las posiciones que sean iguales y distinto de \0
  299. # en las diferentes.
  300. #
  301. my $proteina_diferencias = $proteina_sintetica ^ $proteina_nucleotidos;
  302.  
  303. # Los nucleótidos diferentes de cero los marcamos con un asterisco
  304. my $numero_diferencias = $proteina_diferencias =~ tr/\0/*/c;
  305.  
  306. # Los demás, a espacio en blanco
  307. $proteina_diferencias =~ tr/\0/ /;
  308.  
  309.  
  310.  
  311. ### Salida #####################################################################
  312. #
  313. # Un fichero de texto, hacia el fichero con nombre $fichero_salida.
  314. # El $ancho indica el ancho de la fila a mostrar, que será dividida en bloques
  315. # de $ANCHOSEQ nucleótidos.
  316. # La presentación será: 3 líneas por cada bloque de $ancho nucleótidos:
  317. # * La parte de la secuencia del segundo fichero
  318. # * Las diferencias
  319. # * La parte de la secuencia del segundo fichero generada con las frecuencias de
  320. # codones del primero.
  321. # Las líneas serán precedidas por el índice de la posición de comienzo de la
  322. # secuencia.
  323. #
  324. open my $REPORT, q[>], $fichero_salida
  325.     or die "ERROR: No puedo escribir en $fichero_salida: $!\n";
  326.  
  327. # Cabecera
  328. if ($numero_diferencias) {
  329.     print $REPORT "En total hay $numero_diferencias cambios\n\n";
  330. }
  331. else {
  332.     print $REPORT "No hay ningún cambio\n\n";
  333. }
  334.  
  335. # Formato de las líneas de salida
  336. my $formato_salida = "%4d %s\n";
  337.  
  338. # Toda la secuencia de nucleótidos, la dividimos en partes de tamaño $ancho
  339. for (my $i = 0; $i < length $proteina_nucleotidos; $i += $ancho) {
  340.  
  341.     # Partes de la secuencias a mostrar, en cada línea
  342.     my $parte_nucleotidos = substr($proteina_nucleotidos, $i, $ancho);
  343.     my $parte_diferencias = substr($proteina_diferencias, $i, $ancho);
  344.     my $parte_sintetica   = substr($proteina_sintetica,   $i, $ancho);
  345.  
  346.     # Insertar espacios cada $ANCHOSEQ caracteres para aumentar la legibilidad
  347.     # Calculamos la posición del último espacio, hacia la derecha, y vamos
  348.     # retrocediendo en $ANCHOSEQ posiciones, hacia la izquierda
  349.     for (my $j = ($ancho/$ANCHOSEQ-1)*$ANCHOSEQ; $j; $j -= $ANCHOSEQ) {
  350.         substr($parte_nucleotidos, $j, 0) = ' ';
  351.         substr($parte_diferencias, $j, 0) = ' ';
  352.         substr($parte_sintetica,   $j, 0) = ' ';
  353.     }
  354.  
  355.     # Imprimir
  356.     printf $REPORT $formato_salida, $i+1, $parte_nucleotidos;
  357.     printf $REPORT $formato_salida, $i+1, $parte_diferencias;
  358.     printf $REPORT $formato_salida, $i+1, $parte_sintetica;
  359.  
  360.     print $REPORT "\n";
  361. }
  362.  
  363.  
  364. close $REPORT;
  365.  
  366. ### Fin del programa
  367.  
  368.  
  369. ### Subrutinas #################################################################
  370. sub leer_fichero_FASTA {
  371.     ## Lectura de un fichero FASTA
  372.     # Argumentos de entrada
  373.     my $fichero = shift;                # Nombre del fichero a leer
  374.     #
  375.     # Salida
  376.     #   Secuencias de nucleótidos y de aminoácidos leídas del fichero
  377.  
  378.     ### Lectura del fichero
  379.     # Se supone que el fichero sigue la estructura siguiente:
  380.     # Pares de secuencias, en formato FASTA, de las cuales
  381.     #   la primera secuencia del par es la representación en codones
  382.     #   la segunda secuencia del par es la representación en aminoácidos
  383.     #
  384.     # Se producirá un error si
  385.     #   No hay un número par de secuencias
  386.     #
  387.     my $en_seccion_aminoacidos = 1; # Indica el tipo de secuencia que estamos
  388.                                     # leyendo: 0 para codones, 1 para aminoac.
  389.                                     # Empieza en 1 porque la primera sec. será
  390.                                     # con codones, por lo que hacemos creer que
  391.                                     # venimos de una sección de aminoácidos
  392.  
  393.     my $secuencia_nucleotidos;      # Aquí, los nucleótidos
  394.     my $secuencia_aminoacidos;      # Aquí, los aminoácidos
  395.  
  396.  
  397.     open my $FASTA, q[<], $fichero
  398.         or die "ERROR: No puedo abrir el fichero $fichero: $!\n";
  399.  
  400.     while (my $linea = <$FASTA>) {
  401.         chomp $linea;
  402.  
  403.         # Nueva sección
  404.         if ($linea =~ /^>/) {
  405.             $en_seccion_aminoacidos = not $en_seccion_aminoacidos;
  406.             next;
  407.         }
  408.  
  409.         # Secuencia normal
  410.         if ($en_seccion_aminoacidos) {
  411.             $secuencia_aminoacidos .= $linea;
  412.         }
  413.         else {
  414.             $secuencia_nucleotidos .= $linea;
  415.         }
  416.     }
  417.  
  418.     close $FASTA;
  419.  
  420.     # Última comprobación
  421.     if (not $en_seccion_aminoacidos) {
  422.         die "ERROR: No hay un número par de secuencias en el fichero $fichero\n";
  423.     }
  424.  
  425.     # Cosmética: todo mayúsculas
  426.     $secuencia_nucleotidos = uc $secuencia_nucleotidos;
  427.     $secuencia_aminoacidos = uc $secuencia_aminoacidos;
  428.  
  429.     # Resultado
  430.     return $secuencia_nucleotidos, $secuencia_aminoacidos;
  431. }
  432.  
  433.  
  434. ### Fin del código
  435.  
  436. __END__
Coloreado en 0.011 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Bioinformática

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados