#!/usr/bin/perl -w use strict; ###################### #definim les variables ###################### my $i; #posicio a la nostra sequencia (vector) my $j; #posicio al vector d'aminoacids (vector) my $n; #numero de proteines my $fitxer_seq; #fitxer d'entrada my @amino = ('A' , 'K' , 'N' , 'D' , 'C' , 'Q' , 'E' , 'G' , 'H' , 'I' , 'L' , 'R' , 'M' , 'F' , 'P' , 'S' , 'T' , 'W' , 'Y' , 'V'); #introduim els aa en 1 vector my $numero_rep; #numero de cops que trobem un aminoacid (llargada de la repeticio) my $primera_pos; #primera posicio de la repeticio my $ultim_pos; #ultima posicio de la repeticio my $seq; #variable on fiquem la seq my @seqV; #vector a partir de la variable d'abans my $line; #cada linea my $fitxer_sort; #fitxer de sortida my $nom_prot; #identificador de la proteina my $long_prot; #llargada de la prot my $part; #part de la prot on es troba cada repeticio my $te_repeats; my $n_prot_amb_rep; #proteines amb repeticions # creem un vector per guardar el numero de repeticions de cada aminoacid my @n_aa; $i=0; while($i<20) { $n_aa[$i]=0; $i=$i+1; } my @n_aa_part; $i=0; while($i<20) { $n_aa_part[$i][0]=0; $n_aa_part[$i][1]=0; $n_aa_part[$i][2]=0; $n_aa_part[$i][3]=0; $i=$i+1; } $fitxer_seq = $ARGV[0]; $fitxer_sort = $ARGV[1]; ########################### #obrim el fitxer d'entrada ########################### print "el fitxer d'entrada es: $fitxer_seq\n"; print "el fitxer de sortida es: $fitxer_sort\n"; ########################### #obrim el fitxer de sortida ########################### open (SORTIDA, ">$fitxer_sort"); ################# #cos del programa ################# $n = 0; $primera_pos = 0; $ultim_pos = 0; $numero_rep = 0; $seq = ""; $n_prot_amb_rep=0; $te_repeats=0; open (PROTEINA, "<$fitxer_seq") || die "cannot open file"; ############################################### $nom_prot = ; #la primera linea q llegim es el nom de la prot. ############################################### while (){ if (/>/) { print "\ncontarem repeticions..\n"; @seqV = split (//,$seq); $j = 0; $n=$n+1; while ($j < 20) { $i = 0; while ($i < scalar(@seqV)) { if ($seqV[$i] eq $amino[$j] && $seqV[$i+1] eq $amino[$j] && $seqV[$i+2] eq $amino[$j] && $seqV[$i+3] eq $amino[$j] && $seqV[$i+4] eq $amino[$j]) { $primera_pos = $i; print SORTIDA "\n $nom_prot\t";#ENS MOSTRA LA PROTEINA QUE ESTEM MIRANT# print SORTIDA "$primera_pos\t"; #ENS MOSTRA LA PRIMERA POSICIO DE LA REPETICIO $numero_rep = 5; $te_repeats=1; $i = $i + 5; $n_aa[$j]=$n_aa[$j]+1; while ($seqV[$i] eq $amino[$j]) { $numero_rep = $numero_rep + 1; $i = $i + 1; } $ultim_pos = $i; $long_prot = scalar (@seqV); $part = ($primera_pos / $long_prot); if ($part < 0.25){ $n_aa_part[$j][0] = $n_aa_part [$j][0] + 1; } if (($part >= 0.25) && ($part < 0.5)){ $n_aa_part[$j][1] = $n_aa_part [$j][1] + 1; } if (($part >= 0.5) && ($part < 0.75)){ $n_aa_part[$j][2] = $n_aa_part [$j][2] + 1; } if (($part >= 0.75) && ($part <= 1)){ $n_aa_part[$j][3] = $n_aa_part [$j][3] + 1; } print SORTIDA "$ultim_pos\t"; #ENS MOSTRA LA ULTIMA POSICIO DE LA REPETICIO print SORTIDA "$amino[$j]\t"; #ENS MOSTRA L'AMINOACID QUE ES REPETEIX print SORTIDA "$numero_rep\t"; #ENS MOSTRA EL NUMERO DE REPETICIONS DE L'AMINOACID (LLARGADA DE LA REPETICIO) print SORTIDA "$long_prot\t"; } else { $i = $i + 1; } } $j = $j + 1; } if ($te_repeats == 1){ $n_prot_amb_rep = $n_prot_amb_rep + 1; $te_repeats = 0; } $seq=""; $nom_prot=$_; print "\nestem a proteina: $nom_prot\n"; } else{ $seq = $seq.$_; } } ######################## #ultima proteina ######################## print "\ncontarem repeticions..\n"; @seqV = split (//,$seq); $j = 0; $n=$n+1; while ($j < 20) { $i = 0; while ($i < scalar(@seqV)) { if ($seqV[$i] eq $amino[$j] && $seqV[$i+1] eq $amino[$j] && $seqV[$i+2] eq $amino[$j] && $seqV[$i+3] eq $amino[$j] && $seqV[$i+4] eq $amino[$j]) { $primera_pos = $i; print SORTIDA "\n $nom_prot\t";#ENS MOSTRA LA PROTEINA ON ESTEM print SORTIDA "$primera_pos\t"; #ENS MOSTRA LA PRIMERA POSICIO DE LA REPETICIO $numero_rep = 5; $te_repeats = 1; $i = $i + 5; $n_aa[$j]=$n_aa[$j]+1; while ($seqV[$i] eq $amino[$j]) { $numero_rep = $numero_rep + 1; $i = $i + 1; } $ultim_pos = $i; $long_prot = scalar (@seqV); $part = ($primera_pos / $long_prot); if ($part < 0.25){ $n_aa_part[$j][0] = $n_aa_part [$j][0] + 1; } if (($part >= 0.25) && ($part < 0.5)){ $n_aa_part[$j][1] = $n_aa_part [$j][1] + 1; } if (($part >= 0.5) && ($part < 0.75)){ $n_aa_part[$j][2] = $n_aa_part [$j][2] + 1; } if (($part >= 0.75) && ($part <= 1)){ $n_aa_part[$j][3] = $n_aa_part [$j][3] + 1; } print SORTIDA "$ultim_pos\t"; #ENS MOSTRA LA ULTIMA POSICIO DE LA REPETICIO print SORTIDA "$amino[$j]\t"; #ENS MOSTRA L'AMINOACID QUE ES REPETEIX print SORTIDA "$numero_rep\t"; #ENS MOSTRA EL NUMERO DE REPETICIONS DE L'AMINOACID (LLARGADA DE LA REPETICIO) print SORTIDA "$long_prot\t"; } else { $i = $i + 1; } } $j = $j + 1; } if ($te_repeats == 1){ $n_prot_amb_rep = $n_prot_amb_rep + 1; $te_repeats = 0; } ############### # tanca fitxers ############### print SORTIDA "\nel numero de proteines amb repeticions es: $n_prot_amb_rep\n"; print SORTIDA "\nel numero de sequencies analitzades es: $n\n"; print SORTIDA "\n**************LES REPETICIONS DE CADA AMINOACID SON LES SEGÜENTS************\n"; $j=0; while ($j<20){ print SORTIDA "\nnumero repeticions $amino[$j] es $n_aa[$j]\n"; $j = $j + 1; } print SORTIDA "\n**************LES POSICIONS DE LES REPETICIONS SON LES SEGÜENTS*************\n"; $j=0; while ($j<20){ $i = 0; while ($i<4){ #print SORTIDA "\nla repetició es troba a: $amino[$j] es $n_aa_part[$j][$i]\n"; $i = $i + 1; } print SORTIDA "\nel numero de repeticions al primer quartil de l'aa $amino[$j] es $n_aa_part[$j][0]\n"; print SORTIDA "\nel numero de repeticions al segon quartil de l'aa $amino[$j] es $n_aa_part[$j][1]\n"; print SORTIDA "\nel numero de repeticions al tercer quartil de l'aa $amino[$j] es $n_aa_part[$j][2]\n"; print SORTIDA "\nel numero de repeticions al quart quartil de l'aa $amino[$j] es $n_aa_part[$j][3]\n"; $j = $j + 1; } close (PROTEINA); close (SORTIDA);