#!/usr/bin/perl -w
use strict;
my $input_file; #el fichero que leera el programa
my @seq; #el vector que corresponde a cada fasta
my $seq;
my @aa =("A","R","N","D","C","E","Q","G","H","I","L","K","M","F","P","S","T","W","Y","V");
my $i; #recorre el vector @seq
my $cont; #cuenta el numero de repeticiones para cada aa
my $f; #recorre el vector @aa
my $contdesi; #contador que enumera el numero de repeticiones general, si es cero, secuencia sin repeticiones
my $id;
my $longitud; #es el numero de aa del vector
my $detector; #para diferenciar lineas que siguen a un fasta valido de la primera linea vacia
if (scalar(@ARGV) < 1) { #si al ejecutar el programa no has dado el nombre del fichero,imprime error y cierra
print STDERR "entrar: nom_del_programa fitxer\n";
exit(1);
}
$input_file=$ARGV[0]; #llama input file al fichero que esta en la posicion 0 del vector argv
print "input_file: $input_file\n"; #imprime el fichero que se ha abierto para ejecutar el programa
open(IN,"<$input_file") || die " cannot open input file\n"; #si el fichero no se puede abrir, imprime esto y cierra el programa
$detector = 0;
while() { #mientras haya lineas para leer
if (($_ =~m/(ENSP[0-9]+)/)||($_ =~m/(SINFRUP[0-9]+)/)||($_ =~m/(ENSGALP[0-9]+)/)||($_ =~m/(GSTENP[0-9]+)/)) {
$id = $1;
$detector = 1;
$seq = ""; #para cada bucle esta variable se vacia, para que cada primera linea de las seq se concatene con la siguiente
}
#################################################################################################################
# Las lineas que no son fasta, las concatenamos unas con otras y cada aa lo ponemos en una posicion del #
# vector #
#################################################################################################################
else {
if ($detector == 1) { #si es una sec fasta
chomp $_; #quitale el return
$seq = $seq.$_; #concatena las lineas
$seq = uc($seq); #pasa todos los aa a mayusculas
@seq = split(//,$seq); #cada aa tendra una posicion en el vector seq
$i=0;
$f=0;
$cont=0;
$contdesi = 0;
$longitud = scalar(@seq);
while ($f < scalar (@aa)) { #recorre el vector aa
while ($i < scalar (@seq)) { #recorre todo el vector seq
if ($seq[$i] eq $aa[$f]) { #si el aa que toca es igual al que estamos analizando,
if ($i !=(scalar(@seq) - 1)) { # y si no es el ultimo elemento del vector
$cont = $cont + 1; #cuentalo
$i = $i + 1; #y analiza el siguiente
}
else { #si es el ultimo
$cont = $cont + 1; #cuentalo
if ($cont > 4) { #si el contador es cinco o mas imprime
print "$id\t $longitud\t SI\t $aa[$f]\t $cont\n";
$contdesi = $contdesi + 1; #el contador de si, ya no es cero
$cont = 0; #poner a cero el contador de cada aa
}
else { #si no es el ultimo
$cont = 0; #pon el contador a cero
}
$i = $i + 1; #analiza el siguiente aa del vector seq
}
}
else { #el aa es diferente
if ($i != (scalar(@seq) - 1)) { #es diferente, pero no es el ultimo del vector
if ($cont > 4) { #si el contador es mayor de 4, imprime
print "$id\t $longitud\t SI\t $aa[$f]\t $cont\n";
$contdesi = $contdesi + 1; #el contador de si,ya no es cero
$cont = 0; #ponemos el contador a cero para cambiar de aa
$i = $i + 1; #cambiamos de aa en el vector seq
}
else { #es diferente, pero es el ultimo del vector
$cont = 0; #el contador a 0
$i = $i + 1; #cambiamos de aa en el vector seq
}
}
else { #si es el ultimo elemento del vector#
if ($cont < 5) { #el contador lleva contados menos que cinco aa iguales,ponlo a cero
$cont = 0;
}
else { # el contador es mayor que cinco, imprime el valor
print "$id\t $longitud\t SI\t $aa[$f]\t $cont\n";
$contdesi = $contdesi + 1; #el contador de si ya no es ceroy pon el contador a cero
$cont = 0; #pon el contador de repeticiones para cada aa, a 0
}
$i = $i + 1; #cambiamos de aa en el vector seq
}
}
}
$f= $f + 1; #cambio de aa que analizamos
$i = 0; #empezamos de la posicion 0 de la secuencia
}
if ($contdesi == 0) { #si despues de analizar la seq para los 20 aa, no hay ninguna repeticion
print "$id\t $longitud\t NO\n";
}
}
}
}
}
close (IN);