######################################################################################################### ################################### P R O G R A M A 1 ################################################ ######################################################################################################### #!/usr/bin/perl -w use strict; ## DEFINICION DE VARIABLES my $infile; ## almacena el fichero de datos que entran my $grupo; ## almacena el grupo que queremos que print muestre my $sp; ## para el intron actual, almacena la especie my $intron; ## para el intron actual, almacena la especie my $seq; ## para el intron actual, almacena la secuencia de nucleotidos my %hash; my @todos_los_intrones; my $g; ## indice de @todos_lso_intrones my @esp = ('Sc','Sb','Sm','Sp','star'); ## almacena las 4 especies que ya sabemos que tenemos my $j; ## indice de @esp my $linia; ## almacena $seq de 'Sc' my $star; ## almacena $seq de 'star' my $actual; ## almacena la sequencia de la especie que miramos (cambia con $j) my $a; ## cuenta cuantas secuencias de $actual cumplen la condicion my @branch_sp; ## almacena heptameros de $linia my @branch_star; ## almacena heptameros de $star my $i; ## indice en @branch_sp y @branch_star (coinciden) my $b; ## si encuentra branch-site, $b pasa a valer 1 my %branches; ## almacena la posicion anterior de donde empeiza el branch-site, para cada intron my $interruptor; ## si el intron tiene 3 seƱales reguladoras consenso, este parametro para a valer 1 my %consenso; ## almacena $linia y $star para cada intron consenso my %no_consenso; ## almacena $linia y $star para cada intron no consenso if(scalar(@ARGV)<2){ print"Escribe: perl primero.pl dataset.txt 1 o 2 (consenso/noconsenso)\n"; exit (1); }; $infile = $ARGV[0]; $grupo = $ARGV[1]; if (!open(INFILE,"< $infile")){ print"primero.pl: imposible abrir $infile\n"; exit (1); }; ## CONSTRUCCION DEL HASH $g = 0; while(){ chomp; if ($_ =~/(S\w)_(\S+)\s([ACGT-]+)/){ $sp = $1; ## almacena la especie de la linia que lee desde dataset.txt $intron = $2; ## almacena el nombre del intron de la linia que lee desde dataset.txt $seq = $3; ## almacena la secuencia de nucleotidos que lee desde dataset.txt }; if ($_ =~ /\s([\* ]+)/g){ $sp = 'star'; $seq = $1; $todos_los_intrones[$g] = $intron; ## almacena todos los nombres de los intrones que usamos $g = $g + 1; }; $hash{$intron}{$sp} = $seq; }; ## RECORRE %HASH PARA DIFERENCIAR DOS GRUPOS DE INTRONES: consenso / no consenso. $g = 0; while($g < scalar(@todos_los_intrones)){ ## utilitza @todos_los_intrones para recorrer %hash $interruptor = 0; $a = 0; ## assigna 0 a todos los indices y contadores $j = 0; $i = 0; $b = 0; $linia = $hash{$todos_los_intrones[$g]}{'Sc'}; $star = $hash{$todos_los_intrones[$g]}{'star'}; ## BUSQUEDA DE BRANCH CONSENSO while($i <= length($linia) - 7){ $branch_sp[$i] = substr($linia,$i,7); $branch_star[$i] = substr($star,$i,7); if(($branch_sp[$i] eq 'TACTAAC') && ($branch_star[$i] eq '*******')){ $branches{$todos_los_intrones[$g]} = $i; $b = $b + 1; $i = length($linia) + 1; }; $i = $i + 1; }; ## BUSQUEDA DE DONOR-SITE CONSENSO if(($b > 0) && ($linia =~/\AGTATGT[ACTG-]+\Z/) && ($star =~/\A\*{6}[\* ]+\Z/)){ while($j <= 3){ $actual = $hash{$todos_los_intrones[$g]}{$esp[$j]}; ## BUSQUEDA DE ACCEPTOR-SITE CONSENSO if (($actual =~/\A[ACGT-]+[CT]AG\Z/) && ($star =~/\A[\* ]+\*{2}\Z/)){ $a = $a + 1; }; $j = $j + 1; if ($a == 4){ $interruptor = 1; $j = 10; }; }; }; ## IMPRIME EL GRUPO 1 if ($interruptor == 1 && $grupo == 1){ $consenso{$todos_los_intrones[$g]}{'Sc'} = $linia; $consenso{$todos_los_intrones[$g]}{'star'} = $star; print$todos_los_intrones[$g],"\tbranch $branches{$todos_los_intrones[$g]}\n"; print$todos_los_intrones[$g],"\t","Sc","\t",$linia,"\n"; print$todos_los_intrones[$g],"\t","star","\t",$star,"\n"; }; ## IMPRIME EL GRUPO 2 if ($interruptor == 0 && $grupo == 2){ $no_consenso{$todos_los_intrones[$g]}{'star'} = $star; $no_consenso{$todos_los_intrones[$g]}{'Sc'} = $linia; if ($b > 0){ print$todos_los_intrones[$g],"\tbranch $branches{$todos_los_intrones[$g]}\n"; }; print$todos_los_intrones[$g],"\t","Sc","\t",$linia,"\n"; print$todos_los_intrones[$g],"\t","star","\t",$star,"\n"; }; $g = $g + 1; ## PASSSA AL INTRON SIGUIENTE };