• Publicidad

Simular mutaciones dentro de una matriz

Perl aplicado a la bioinformática

Simular mutaciones dentro de una matriz

Notapor jalapea » 2015-03-25 10:13 @467

Un buen día. Estoy tratando de realizar una matriz para simular mutaciones.
La característica de la matriz sería:

filas igual a los 64 codones
columna 1 igual a exones

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
          codón 1          codón 2   codón 3 ...  codón n
          UUU             UUC      UUG            ...
exon 1    frecuencia
          de mutación
exon 2

exon 3
.
.
.
exon m
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Lo anterior sería el esquema de la matriz.

¿Me podrían colaborar en cuáles serían los pasos para empezar a crear el script en Perl?

Les agradezco su colaboración.
Última edición por explorer el 2015-03-25 10:53 @495, editado 1 vez en total
Razón: dia => día; caracteristica => característica; seria => sería; me => ¿Me; podrian => podrían; cuales => cuáles; serian => serían; perl. => Perl?; colaboracion => colaboración;
jalapea
Perlero nuevo
Perlero nuevo
 
Mensajes: 7
Registrado: 2015-03-03 22:42 @987

Publicidad

Re: Simular mutaciones dentro de una matriz

Notapor explorer » 2015-03-25 11:02 @501

A mi me faltan muchos detalles para saber qué es lo que hay que hacer.

De momento, te digo que ya hemos hablado de mutaciones, en estos hilos:
Si nos das más detalles, pues más detalles tendrás.

¿Lo que quieres es acceder de forma aleatoria dentro de la matriz? ¿O quieres que en una secuencia de codones, mutarlos según la probabilidad indicada en la tabla?

Quizás con un ejemplo real sea más fácil verlo.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Simular mutaciones dentro de una matriz

Notapor jalapea » 2015-05-08 11:17 @511

Les solicito su colaboración con lo siguiente.

Teniendo los siguientes datos:

my $secuencia1 = "TCACTCACTCACACCTCCCGCAGCTCACCTCCTCCCCACCCCAGCATGGCCGCGTCCACC";
my $secuencia1 = "GGATGCTTATTATAGATCGACGCGACACCAGCGCCCGGTGCCAGGTTCTCCCCTGAGGCT";
my $secuencia1 = "GGAAGGTGGCGGTGGTGAAGGTGCAGGCCGTTGGGGCGGCTCAGAGGCAGAGTTCCACAG";

my(%genetic_code) = (

'TCA', # Serine 'S'
'TCC', # Serine 'S'
'TCG', # Serine 'S'
'TCT', # Serine 'S'
'TTC', # Phenylalanine 'F'
'TTT', # Phenylalanine 'F'
'TTA', # Leucine 'L'
'TTG', # Leucine 'L'
'TAC', # Tyrosine 'Y'
'TAT', # Tyrosine 'Y'
'TAA', # Stop '_'
'TAG', # Stop '_'
'TGC', # Cysteine 'C'
'TGT', # Cysteine 'C'
'TGA', # Stop '_'
'TGG', # Tryptophan 'W'
'CTA', # Leucine 'L'
'CTC', # Leucine 'L'
'CTG', # Leucine 'L'
'CTT', # Leucine 'L'
'CCA', # Proline 'P'
'CCC', # Proline 'P'
'CCG', # Proline 'P'
'CCT', # Proline 'P'
'CAC', # Histidine 'H'
'CAT', # Histidine 'H'
'CAA', # Glutamine 'Q'
'CAG', # Glutamine 'Q'
'CGA', # Arginine 'R'
'CGC', # Arginine 'R'
'CGG', # Arginine 'R'
'CGT', # Arginine 'R'
'ATA', # Isoleucine 'I'
'ATC', # Isoleucine 'I'
'ATT', # Isoleucine 'I'
'ATG', # Methionine 'M'
'ACA', # Threonine 'T'
'ACC', # Threonine 'T'
'ACG', # Threonine 'T'
'ACT', # Threonine 'T'
'AAC', # Asparagine 'N'
'AAT', # Asparagine 'N'
'AAA', # Lysine 'K'
'AAG', # Lysine 'K'
'AGC', # Serine 'S'
'AGT', # Serine 'S'
'AGA', # Arginine 'R'
'AGG', # Arginine 'R'
'GTA', # Valine 'V'
'GTC', # Valine 'V'
'GTG', # Valine 'V'
'GTT', # Valine 'V'
'GCA', # Alanine 'A'
'GCC', # Alanine 'A'
'GCG', # Alanine 'A'
'GCT', # Alanine 'A'
'GAC', # Aspartic Acid 'D'
'GAT', # Aspartic Acid 'D'
'GAA', # Glutamic Acid 'E'
'GAG', # Glutamic Acid 'E'
'GGA', # Glycine 'G'
'GGC', # Glycine 'G'
'GGG', # Glycine 'G'
'GGT', # Glycine 'G'
);

Después de mutar 1000 veces cada secuencia, se arroje el porcentaje de mutación de cada codón (arreglo del código genético), para poder graficar cómo sería la distribución del porcentaje de mutaciones, por secuencia y en la totalidad de secuencias.

Les agradezco su colaboración.
jalapea
Perlero nuevo
Perlero nuevo
 
Mensajes: 7
Registrado: 2015-03-03 22:42 @987

Re: Simular mutaciones dentro de una matriz

Notapor explorer » 2015-05-09 05:04 @253

¿Has hecho ya la parte de mutar 1000 veces?
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Simular mutaciones dentro de una matriz

Notapor jalapea » 2015-05-12 01:25 @101

explorer, un buen día. Lo que llevo hasta el momento es:

#!/usr/bin/perl -w

# using a random number generator to randomly select bases to mutate
use strict;
use warnings;
# Declare the variables
# The DNA is chosen to make it easy to see mutations:
my (%secuencias) = 'TCACTCACTCACACCTCCCGCAGCTCACCTCCTCCCCACCCCAGCATGGCCGCGTCCACC', 'GGATGCTTATTATAGATCGACGCGACACCAGCGCCCGGTGCCAGGTTCTCCCCTGAGGC', 'GGAAGGTGGCGGTGGTGAAGGTGCAGGCCGTTGGGGCGGCTCAGAGGCAGAGTTCCAC';
my $i;
my $mutant;
# Seed the random number generator.
# time|$$ combines the current time with the current process id
srand(time|$$);
# Let's test it, shall we?
$mutant = mutate(%secuencias);
print "\nMutate secuencias\n\n";
print "\nHere is the original DNA:\n\n";
print "%secuencias\n";
print "\nHere is the mutant secuencias:\n\n";
print "%mutant\n";
# Let's put it in a loop and watch that bad boy accumulate mutations:
print "\nHere are 1000 more successive mutations:\n\n";
for ($i=0 ; $i < 1000 ; ++$i) {
%mutant = mutate(%mutant);
print "$mutant\n"; }
exit;

#########################
# Subroutines
#########################
# Notice, now that we have a fair number of subroutines, we
# list them alphabetically
# A subroutine to perform a mutation in a string of DNA
#
# WARNING: make sure you call srand to seed the
# random number generator before you call this function.
sub mutate {
my(%secuencias) = @_;

my(@geneticcode) = (
'TCA', # Serine 'S'
'TCC', # Serine 'S'
'TCG', # Serine 'S'
'TCT', # Serine 'S'
'TTC', # Phenylalanine 'F'
'TTT', # Phenylalanine 'F'
'TTA', # Leucine 'L'
'TTG', # Leucine 'L'
'TAC', # Tyrosine 'Y'
'TAT', # Tyrosine 'Y'
'TAA', # Stop '_'
'TAG', # Stop '_'
'TGC', # Cysteine 'C'
'TGT', # Cysteine 'C'
'TGA', # Stop '_'
'TGG', # Tryptophan 'W'
'CTA', # Leucine 'L'
'CTC', # Leucine 'L'
'CTG', # Leucine 'L'
'CTT', # Leucine 'L'
'CCA', # Proline 'P'
'CCC', # Proline 'P'
'CCG', # Proline 'P'
'CCT', # Proline 'P'
'CAC', # Histidine 'H'
'CAT', # Histidine 'H'
'CAA', # Glutamine 'Q'
'CAG', # Glutamine 'Q'
'CGA', # Arginine 'R'
'CGC', # Arginine 'R'
'CGG', # Arginine 'R'
'CGT', # Arginine 'R'
'ATA', # Isoleucine 'I'
'ATC', # Isoleucine 'I'
'ATT', # Isoleucine 'I'
'ATG', # Methionine 'M'
'ACA', # Threonine 'T'
'ACC', # Threonine 'T'
'ACG', # Threonine 'T'
'ACT', # Threonine 'T'
'AAC', # Asparagine 'N'
'AAT', # Asparagine 'N'
'AAA', # Lysine 'K'
'AAG', # Lysine 'K'
'AGC', # Serine 'S'
'AGT', # Serine 'S'
'AGA', # Arginine 'R'
'AGG', # Arginine 'R'
'GTA', # Valine 'V'
'GTC', # Valine 'V'
'GTG', # Valine 'V'
'GTT', # Valine 'V'
'GCA', # Alanine 'A'
'GCC', # Alanine 'A'
'GCG', # Alanine 'A'
'GCT', # Alanine 'A'
'GAC', # Aspartic Acid 'D'
'GAT', # Aspartic Acid 'D'
'GAA', # Glutamic Acid 'E'
'GAG', # Glutamic Acid 'E'
'GGA', # Glycine 'G'
'GGC', # Glycine 'G'
'GGG', # Glycine 'G'
'GGT', # Glycine 'G'
);

my($position) = randomposition(%sequencias);
my($newbase) = randomnucleotide(@geneticcode);
# Insert the random geneticcode into the random position in the DNA
# The substr arguments mean the following:
# In the string %secuencias at position $position change 1 character to
# the string in $newbase
substr(%secuencia,$position,1,$newbase);
return %secuencia; }

# A subroutine to randomly select an element from an array
# WARNING: make sure you call srand to seed the
# random number generator before you call this function.
sub randomelement {
my(@array) = @_;
return $array[rand @array];
}

# randomnucleotide
# A subroutine to select at random one of the four nucleotides
# WARNING: make sure you call srand to seed the
# random number generator before you call this function.
sub randomnucleotide {
my(@geneticcode) = (
'TCA', # Serine 'S'
'TCC', # Serine 'S'
'TCG', # Serine 'S'
'TCT', # Serine 'S'
'TTC', # Phenylalanine 'F'
'TTT', # Phenylalanine 'F'
'TTA', # Leucine 'L'
'TTG', # Leucine 'L'
'TAC', # Tyrosine 'Y'
'TAT', # Tyrosine 'Y'
'TAA', # Stop '_'
'TAG', # Stop '_'
'TGC', # Cysteine 'C'
'TGT', # Cysteine 'C'
'TGA', # Stop '_'
'TGG', # Tryptophan 'W'
'CTA', # Leucine 'L'
'CTC', # Leucine 'L'
'CTG', # Leucine 'L'
'CTT', # Leucine 'L'
'CCA', # Proline 'P'
'CCC', # Proline 'P'
'CCG', # Proline 'P'
'CCT', # Proline 'P'
'CAC', # Histidine 'H'
'CAT', # Histidine 'H'
'CAA', # Glutamine 'Q'
'CAG', # Glutamine 'Q'
'CGA', # Arginine 'R'
'CGC', # Arginine 'R'
'CGG', # Arginine 'R'
'CGT', # Arginine 'R'
'ATA', # Isoleucine 'I'
'ATC', # Isoleucine 'I'
'ATT', # Isoleucine 'I'
'ATG', # Methionine 'M'
'ACA', # Threonine 'T'
'ACC', # Threonine 'T'
'ACG', # Threonine 'T'
'ACT', # Threonine 'T'
'AAC', # Asparagine 'N'
'AAT', # Asparagine 'N'
'AAA', # Lysine 'K'
'AAG', # Lysine 'K'
'AGC', # Serine 'S'
'AGT', # Serine 'S'
'AGA', # Arginine 'R'
'AGG', # Arginine 'R'
'GTA', # Valine 'V'
'GTC', # Valine 'V'
'GTG', # Valine 'V'
'GTT', # Valine 'V'
'GCA', # Alanine 'A'
'GCC', # Alanine 'A'
'GCG', # Alanine 'A'
'GCT', # Alanine 'A'
'GAC', # Aspartic Acid 'D'
'GAT', # Aspartic Acid 'D'
'GAA', # Glutamic Acid 'E'
'GAG', # Glutamic Acid 'E'
'GGA', # Glycine 'G'
'GGC', # Glycine 'G'
'GGG', # Glycine 'G'
'GGT', # Glycine 'G'
);

# scalar returns the size of an array.
# The elements of the array are numbered 0 to size-1
return randomelement(@geneticcode);
}

# randomposition
# A subroutine to randomly select a position in a string.
# WARNING: make sure you call srand to seed the
# random number generator before you call this function.
sub randomposition {
my($string) = @_;
# The whole expression returns a random number between 0 and
length-1, which is how the positions in a string are numbered in Perl.
return int rand length $string;
}

Pero no he podido correrlo.
jalapea
Perlero nuevo
Perlero nuevo
 
Mensajes: 7
Registrado: 2015-03-03 22:42 @987

Re: Simular mutaciones dentro de una matriz

Notapor explorer » 2015-05-12 05:46 @282

Si corremos el programa con la opción '-c', hace la fase de compilación, y nos dirá qué pasa:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
> perl -c mutacion.pl
Warning: Use of "length-1" without parentheses is ambiguous at mutacion.pl line 216.
Global symbol "%mutant" requires explicit package name at mutacion.pl line 32.
Global symbol "%mutant" requires explicit package name at mutacion.pl line 32.
Global symbol "%sequencias" requires explicit package name at mutacion.pl line 115.
Global symbol "%secuencia" requires explicit package name at mutacion.pl line 121.
Global symbol "%secuencia" requires explicit package name at mutacion.pl line 122.
mutacion.pl had compilation errors.
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Perl te dice exactamente qué errores tienes en el código.

No está muy claro qué quieres hacer. Sabemos que hay unas secuencias y que quieres luego meterle 1000 mutaciones, se supone que luego para sacar estadísticas, pero lo que no sabemos es cómo hay que comparar las secuencias mutadas con los codones.

Tu código es remiendo de varios otros códigos. Has copiado y pegado partes de varios programas, de estos foros, supongo. Pero es que de esa manera no obtendrás lo que quieres.

Es como mezclar código genético y que de ahí salga una secuencia que pueda generar algo viable.

Esta es una versión que solo muta:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. #
  3. #       Generador de mutaciones en secuencias
  4. #
  5. # Joaquín Ferrero, 2015
  6. #
  7. # v20150512 - Primera versión
  8. #
  9.  
  10. use strict;
  11. use warnings;
  12.  
  13. # Ajustamos el generador de números aleatorios
  14. # time|$$ combina la hora y fecha actuales con el identificados del proceso actual
  15. srand(time|$$);
  16.  
  17. # Listado de codones disponibles
  18. my(@codones) = (
  19.     'TCA', # Serine 'S'
  20.     'TCC', # Serine 'S'
  21.     'TCG', # Serine 'S'
  22.     'TCT', # Serine 'S'
  23.     'TTC', # Phenylalanine 'F'
  24.     'TTT', # Phenylalanine 'F'
  25.     'TTA', # Leucine 'L'
  26.     'TTG', # Leucine 'L'
  27.     'TAC', # Tyrosine 'Y'
  28.     'TAT', # Tyrosine 'Y'
  29.     'TAA', # Stop '_'
  30.     'TAG', # Stop '_'
  31.     'TGC', # Cysteine 'C'
  32.     'TGT', # Cysteine 'C'
  33.     'TGA', # Stop '_'
  34.     'TGG', # Tryptophan 'W'
  35.     'CTA', # Leucine 'L'
  36.     'CTC', # Leucine 'L'
  37.     'CTG', # Leucine 'L'
  38.     'CTT', # Leucine 'L'
  39.     'CCA', # Proline 'P'
  40.     'CCC', # Proline 'P'
  41.     'CCG', # Proline 'P'
  42.     'CCT', # Proline 'P'
  43.     'CAC', # Histidine 'H'
  44.     'CAT', # Histidine 'H'
  45.     'CAA', # Glutamine 'Q'
  46.     'CAG', # Glutamine 'Q'
  47.     'CGA', # Arginine 'R'
  48.     'CGC', # Arginine 'R'
  49.     'CGG', # Arginine 'R'
  50.     'CGT', # Arginine 'R'
  51.     'ATA', # Isoleucine 'I'
  52.     'ATC', # Isoleucine 'I'
  53.     'ATT', # Isoleucine 'I'
  54.     'ATG', # Methionine 'M'
  55.     'ACA', # Threonine 'T'
  56.     'ACC', # Threonine 'T'
  57.     'ACG', # Threonine 'T'
  58.     'ACT', # Threonine 'T'
  59.     'AAC', # Asparagine 'N'
  60.     'AAT', # Asparagine 'N'
  61.     'AAA', # Lysine 'K'
  62.     'AAG', # Lysine 'K'
  63.     'AGC', # Serine 'S'
  64.     'AGT', # Serine 'S'
  65.     'AGA', # Arginine 'R'
  66.     'AGG', # Arginine 'R'
  67.     'GTA', # Valine 'V'
  68.     'GTC', # Valine 'V'
  69.     'GTG', # Valine 'V'
  70.     'GTT', # Valine 'V'
  71.     'GCA', # Alanine 'A'
  72.     'GCC', # Alanine 'A'
  73.     'GCG', # Alanine 'A'
  74.     'GCT', # Alanine 'A'
  75.     'GAC', # Aspartic Acid 'D'
  76.     'GAT', # Aspartic Acid 'D'
  77.     'GAA', # Glutamic Acid 'E'
  78.     'GAG', # Glutamic Acid 'E'
  79.     'GGA', # Glycine 'G'
  80.     'GGC', # Glycine 'G'
  81.     'GGG', # Glycine 'G'
  82.     'GGT', # Glycine 'G'
  83. );
  84.  
  85.  
  86. # Secuencias génicas a mutar
  87. my @secuencias = qw(
  88.     TCACTCACTCACACCTCCCGCAGCTCACCTCCTCCCCACCCCAGCATGGCCGCGTCCACC
  89.     GGATGCTTATTATAGATCGACGCGACACCAGCGCCCGGTGCCAGGTTCTCCCCTGAGGC
  90.     GGAAGGTGGCGGTGGTGAAGGTGCAGGCCGTTGGGGCGGCTCAGAGGCAGAGTTCCAC
  91. );
  92.  
  93.  
  94. # Proceso
  95. for my $seq (@secuencias) {
  96.  
  97.     print "Original: [$seq]\n";
  98.     for my $i (1 .. 1000) {
  99.         $seq = muta($seq);
  100.     }
  101.     print "Mutada:   [$seq]\n";
  102. }
  103.  
  104. sub muta {
  105.     my($seq) = shift;
  106.  
  107.     my($posicion)  = posicion_aleatorio($seq);
  108.     my($nuevabase) = nucleotico_aleatorio();
  109.  
  110.     # Insertar la $nuevabase en la $posicion dentro de $seq
  111.     substr($seq, $posicion, 1) = $nuevabase;
  112.  
  113.     return $seq;
  114. }
  115.  
  116. sub posicion_aleatorio {
  117.     my($cadena) = shift;
  118.  
  119.     return int rand length $cadena;
  120. }
  121.  
  122. sub nucleotico_aleatorio {
  123.     return ('A','T','C','G')[rand 4];
  124. }
  125.  
  126. __END__
Coloreado en 0.005 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: 14476
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