Secuencias aleatorias de ADN
Publicado: 2010-12-06 06:37 @317
¡¡¡Buen día compañeros!!!
Estoy iniciando en la bioinformática, y pues Perl es el primer peldaño.
Tengo un pequeño problema con un script que comencé por curiosidad. Deseo generar secuencias aleatorias de ADN, con una longitud especificada con el usuario, así como el numero de secuencias. Igualmente el usuario puede definir el % de GC, es decir, qué porcentaje de C y G hay en la cadena.
He creado mi script, pero no me da la salida que deseo; yo deseo algo como:
Pero me da algo así:
Sí, me crea las secuencias aleatorias, con el porcentaje de GC deseado, pero no en el patrón que deseo. ¿Me pueden ayudar a encontrar qué hice incorrectamente? ¡Gracias de antemano!
El script:
Estoy iniciando en la bioinformática, y pues Perl es el primer peldaño.
Tengo un pequeño problema con un script que comencé por curiosidad. Deseo generar secuencias aleatorias de ADN, con una longitud especificada con el usuario, así como el numero de secuencias. Igualmente el usuario puede definir el % de GC, es decir, qué porcentaje de C y G hay en la cadena.
He creado mi script, pero no me da la salida que deseo; yo deseo algo como:
Using text Syntax Highlighting
Pero me da algo así:
Using text Syntax Highlighting
CATCTAAAAG
CATCTAAAAGTGCGTAGATC
CATCTAAAAGTGCGTAGATCGTGTACCAAC
CATCTAAAAGTGCGTAGATCGTGTACCAACAGGAGGCTTG
CATCTAAAAGTGCGTAGATC
CATCTAAAAGTGCGTAGATCGTGTACCAAC
CATCTAAAAGTGCGTAGATCGTGTACCAACAGGAGGCTTG
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
Sí, me crea las secuencias aleatorias, con el porcentaje de GC deseado, pero no en el patrón que deseo. ¿Me pueden ayudar a encontrar qué hice incorrectamente? ¡Gracias de antemano!
El script:
Using perl Syntax Highlighting
- #!/usr/bin/perl
- #random_nt.pl
- #Script generates "n" random DNA sequences given a %GC and length of sequence
- use strict; use warnings;
- die "usage: random_nt.pl <gc %> <length> <# sequences>" unless @ARGV == 3;
- my ($gc, $length, $nseq) = @ARGV;
- my $seq = '';
- foreach (my $i = 0; $i < $nseq; $i++){
- for (my $j = 0; $j < $length; $j++){
- my $newnt = rndmbp ($gc);
- $seq .= $newnt;
- }
- print "$seq\n";
- }
- sub rndmbp {
- my ($gc) = @_;
- my $GC = ($gc/2);
- my $AT = (0.5-$GC);
- my ($base) = '';
- my $rndm = rand;
- if ($rndm > ((2*$AT)+$GC))
- {$base .= "G";}
- elsif ($rndm > (2*$AT))
- {$base .= "C";}
- elsif ($rndm > $AT)
- {$base .= "A";}
- elsif ($rndm > 0)
- {$base .= "T";}
- return $base;
- }
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4