######################################################################################################### ################################### P R O G R A M A 1 ################################################ ######################################################################################################### #!/usr/bin/perl -w use strict; ## DEFINICIO DE VARIABLES my $infile; ## emmagatzema el fitxer de dades d'entrada my $grup; ## registra el grup que volem mostrar amb print my $sp; ## per l'intro actual, emmagatzema l'especie my $intro; ## per l'intro actual, enregistra el nom d'intro my $seq; ## per l'intro actual, enregistra la sequencia de nucleotids my %hash; my @tots_els_introns; my $g; ## index de @tots_els_introns my @esp = ('Sc','Sb','Sm','Sp','star'); ## emmagatzema les 4 especies que ja sabem que tenim my $j; ## index de @esp my $linia; ## enregistra $seq de 'Sc' my $star; ## enregistra $seq de 'star' my $actual; ## enregistra la sequencia de l'especie que mirem my $a; ## compta quantes sequencies de $actual compleixen la condicio my @branch_sp; ## enregistra heptamers de $linia my @branch_star; ## enregistra heptamers de $star my $i; ## index a @branch_sp i @branch_star (coincideix) my $b; ## si troba branch-site, aquest valor es fa 1. my %branches; ## emmagatzema la posicio on comença el branch-site, per a cada intro my $interruptor; ## si l'intro te 3 senyals reguladores consens, aquest parametre es fa 1. my %consenso; ## emmagatzema $linia i $star per cada intro consens my %no_consenso; ## emmagatzema $linia i $star per cada intro no consens if(scalar(@ARGV)<2){ print"Escriu: perl primer.pl dataset.txt 1 o 2 (consens/noconsens)\n"; exit (1); }; $infile = $ARGV[0]; $grup = $ARGV[1]; if (!open(INFILE,"< $infile")){ print"primer.pl: impossible obrir $infile\n"; exit (1); }; ## CONSTRUCCIO DEL HASH $g = 0; while(){ chomp; if ($_ =~/(S\w)_(\S+)\s([ACGT-]+)/){ $sp = $1; ## enregistra l'especies de la linia que llegeix de dataset.txt $intro = $2; ## enregistra el nom de l'intro de la linia que llegeix de dataset.txt $seq = $3; ## enregistra la sequencia de nucleotids que llegeix a dataset.txt }; if ($_ =~ /\s([\* ]+)/g){ $sp = 'star'; $seq = $1; $tots_els_introns[$g] = $intro; ## enregistra tots els noms d'introns que usem $g = $g + 1; }; $hash{$intro}{$sp} = $seq; }; ## RECORRE %HASH PER DIFERENCIAR DOS GRUPS D'INTRONS: consens / no consens. $g = 0; while($g < scalar(@tots_els_introns)){ ## utilitza @tots_els_introns per recorrer %hash $interruptor = 0; $a = 0; ## assigna 0 tots els indexs i comptadors $j = 0; $i = 0; $b = 0; $linia = $hash{$tots_els_introns[$g]}{'Sc'}; $star = $hash{$tots_els_introns[$g]}{'star'}; ## CERCA DE BRANCH CONSENS 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{$tots_els_introns[$g]} = $i; $b = $b + 1; $i = length($linia) + 1; }; $i = $i + 1; }; ## CERCA DE DONOR-SITE CONSENS if(($b > 0) && ($linia =~/\AGTATGT[ACTG-]+\Z/) && ($star =~/\A\*{6}[\* ]+\Z/)){ while($j <= 3){ $actual = $hash{$tots_els_introns[$g]}{$esp[$j]}; ## CERCA D'ACCEPTOR-SITE CONSENS if (($actual =~/\A[ACGT-]+[CT]AG\Z/) && ($star =~/\A[\* ]+\*{2}\Z/)){ $a = $a + 1; }; $j = $j + 1; if ($a == 4){ $interruptor = 1; $j = 10; }; }; }; ## IMPRIMEIX EL GRUP 1 if ($interruptor == 1 && $grup == 1){ $consenso{$tots_els_introns[$g]}{'Sc'} = $linia; $consenso{$tots_els_introns[$g]}{'star'} = $star; print$tots_els_introns[$g],"\tbranch $branches{$tots_els_introns[$g]}\n"; print$tots_els_introns[$g],"\t","Sc","\t",$linia,"\n"; print$tots_els_introns[$g],"\t","star","\t",$star,"\n"; }; ## IMPRIMEIX EL GRUP 2 if ($interruptor == 0 && $grup == 2){ $no_consenso{$tots_els_introns[$g]}{'star'} = $star; $no_consenso{$tots_els_introns[$g]}{'Sc'} = $linia; if ($b > 0){ print$tots_els_introns[$g],"\tbranch $branches{$tots_els_introns[$g]}\n"; }; print$tots_els_introns[$g],"\t","Sc","\t",$linia,"\n"; print$tots_els_introns[$g],"\t","star","\t",$star,"\n"; }; $g = $g + 1; ## PASSSA A L'INTRO SEGUENT };