• Publicidad

Secuencias sinónimas de una proteina

Perl aplicado a la bioinformática

Secuencias sinónimas de una proteina

Notapor explorer » 2011-10-31 15:33 @690

Ejemplo de cómo generar todas las posibles combinaciones de secuencias sinónimas para la proteína MALVSREGPT más un codón de paro que es '>'.

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use common::sense;          # Hay que tener sentido común
  3.  
  4. #use Modern::Perl;          # Somos modernos
  5. #use utf8;
  6.  
  7. use open qw(:utf8 :std);    # Terminal en modo utf8
  8. use autodie;                # Es mejor morir que regresar con deshonor (proverbio Klingon)
  9.  
  10. my %código_genético = (
  11.     'AAA' => 'K',
  12.     'AAC' => 'N',
  13.     'AAG' => 'K',
  14.     'AAT' => 'N',
  15.     'ACA' => 'T',
  16.     'ACC' => 'T',
  17.     'ACG' => 'T',
  18.     'ACT' => 'T',
  19.     'AGA' => 'R',
  20.     'AGC' => 'S',
  21.     'AGG' => 'R',
  22.     'AGT' => 'S',
  23.     'ATA' => 'I',
  24.     'ATC' => 'I',
  25.     'ATG' => 'M',
  26.     'ATT' => 'I',
  27.     'CAA' => 'Q',
  28.     'CAC' => 'H',
  29.     'CAG' => 'Q',
  30.     'CAT' => 'H',
  31.     'CCA' => 'P',
  32.     'CCC' => 'P',
  33.     'CCG' => 'P',
  34.     'CCT' => 'P',
  35.     'CGA' => 'R',
  36.     'CGC' => 'R',
  37.     'CGG' => 'R',
  38.     'CGT' => 'R',
  39.     'CTA' => 'L',
  40.     'CTC' => 'L',
  41.     'CTG' => 'L',
  42.     'CTT' => 'L',
  43.     'GAA' => 'E',
  44.     'GAC' => 'D',
  45.     'GAG' => 'E',
  46.     'GAT' => 'D',
  47.     'GCA' => 'A',
  48.     'GCC' => 'A',
  49.     'GCG' => 'A',
  50.     'GCT' => 'A',
  51.     'GGA' => 'G',
  52.     'GGC' => 'G',
  53.     'GGG' => 'G',
  54.     'GGT' => 'G',
  55.     'GTA' => 'V',
  56.     'GTC' => 'V',
  57.     'GTG' => 'V',
  58.     'GTT' => 'V',
  59.     'NNN' => 'X',
  60.     'TAA' => '>',
  61.     'TAC' => 'Y',
  62.     'TAG' => '>',
  63.     'TAT' => 'Y',
  64.     'TCA' => 'S',
  65.     'TCC' => 'S',
  66.     'TCG' => 'S',
  67.     'TCT' => 'S',
  68.     'TGA' => '>',
  69.     'TGC' => 'C',
  70.     'TGG' => 'W',
  71.     'TGT' => 'C',
  72.     'TTA' => 'L',
  73.     'TTC' => 'F',
  74.     'TTG' => 'L',
  75.     'TTT' => 'F',
  76. );
  77.  
  78. my $secuencia = 'MALVSREGPT';
  79. my $secuencia_original = $secuencia;
  80.  
  81. $secuencia = "$secuencia>";                     # Le añadimos el codón de final
  82.  
  83. my @codones_secuencia;                          # Array de array de codones
  84.  
  85. ## Análisis de la secuencia
  86. for my $amino (split //, $secuencia) {          # partimos la secuencia, letra a letra
  87.  
  88.     # Buscamos los codones correspondientes
  89.     my @codones;
  90.     while (my($gen_codón, $amino_gen) = each %código_genético) {
  91.         push @codones, $gen_codón
  92.             if $amino_gen eq $amino;
  93.     }
  94.  
  95. #    say "$amino => [ sort @codones ]";
  96.  
  97.     push @codones_secuencia, [ sort @codones ];
  98. }
  99.  
  100. ## Creación del código
  101. my @sinónimas;
  102. my @constructor;
  103. my $programa = '$" = "";' . "\n";
  104.  
  105. for my $i (0 .. $#codones_secuencia) {
  106.     $programa .= ("\t" x $i) . "for my \$a$i (qw(@{$codones_secuencia[$i]})) {\n";
  107.     $programa .= ("\t" x $i) . "\t\$constructor[$i] = \$a$i;\n";
  108. }
  109.  
  110. $programa .= ("\t" x @codones_secuencia) . qq(push \@sinónimas, "\@constructor";\n);
  111.  
  112. $programa .= '}' x @codones_secuencia;
  113.  
  114. #say $programa;
  115.  
  116. #
  117. say "Generando sinónimas...";
  118. eval $programa;
  119. say "Número de sinónimas: ", scalar @sinónimas;
  120.  
  121. #
  122. say "Grabando...";
  123. open my $fichero, '>', 'sinonimas';
  124. say $fichero $secuencia_original;
  125. for (@sinónimas) {
  126.     say $fichero "  $_";
  127. }
  128. close $fichero;
Coloreado en 0.006 segundos, usando GeSHi 1.0.8.4
La salida del programa es:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
Generando sinónimas...
Número de sinónimas: 1327104
Grabando...
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
Y el fichero generado es:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
MALVSREGPT
  ATGGCACTAGTAAGCAGAGAAGGACCAACATAA
  ATGGCACTAGTAAGCAGAGAAGGACCAACATAG
  ATGGCACTAGTAAGCAGAGAAGGACCAACATGA
  ATGGCACTAGTAAGCAGAGAAGGACCAACCTAA
  ATGGCACTAGTAAGCAGAGAAGGACCAACCTAG
  ATGGCACTAGTAAGCAGAGAAGGACCAACCTGA
  ATGGCACTAGTAAGCAGAGAAGGACCAACGTAA
...
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
y así, 1.327.104 secuencias más.

La teoría de funcionamiento de este programa se basa en la capacidad que tiene Perl de generar más código Perl. En concreto, de la línea 85 a 98 extraemos los codones que intervienen, generando una estructura así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
@codones_secuencia = (
                       [
                         'ATG'
                       ],
                       [
                         'GCC',
                         'GCA',
                         'GCG',
                         'GCT'
                       ],
                       [
                         'CTG',
                         'CTC',
                         'TTG',
                         'CTT',
                         'TTA',
                         'CTA'
                       ], ...
 
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
que es la traducción de la $secuencia a sus correspondientes codones. En las líneas 100 a 116 generamos $programa, que tendrá este aspecto:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$" = "";
for my $a0 (qw(ATG)) {
        $constructor[0] = $a0;
        for my $a1 (qw(GCC GCA GCG GCT)) {
                $constructor[1] = $a1;
                for my $a2 (qw(CTG CTC TTG CTT TTA CTA)) {
                        $constructor[2] = $a2;
                        for my $a3 (qw(GTG GTT GTA GTC)) {
                           ...
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
que se encarga de generar todas las combinaciones.

En la 118 lo ejecutamos, y en las 122 a 128, las guardamos a un fichero.

Las secuencias salen ordenadas alfabéticamente, porque ya hicimos la ordenación en la línea 97.
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

Volver a Bioinformática

¿Quién está conectado?

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

cron