#!/usr/bin/perl -w

use strict;

#
# Declaracio de variables
#

my $seq_parcial;                                                                #variable que enregistra el tros de sequencia a analitzar
my @seq_parcial;  
my $seq_sencera;                                                                #variable que enregistra tota la sequencia
my @seq_sen;                                                                    #llegim les linies de la sequencia
my @aa = ("D","E","A","R","N","C","F","Q","G","H","I","L","K","M","P","S","T","W","Y","V");         #vector on tenim tots els aminoacids
my $aa;                                                                         #variable que conte l'aminoacid
my $aa_ara;                                                                     #variable que conte l'aminoacid repetit
my $i;                                                                          
my $j;
my $iden;                                                                       #variable per enregistrar l'identificador
my $linia;                                                                      #variable on guardem la linia que estem llegint
my $identificador_trobat;                                                       #variable per saber si s'ha trobat o no identificador

###################################
# Programa per trobar repeticions #
###################################

my $fitxer_seq = <STDIN>;                                                       #entrem el nom del fitxer a analitzar les repeticions
my $fitxer_sortida = <STDIN>;                                                   #entrem el nom del fitxer on gurdarem les repeticions

open (SEQUENCIA, "<$fitxer_seq");
open (RESULTATS, "> $fitxer_sortida");
$iden ="";
$linia=<SEQUENCIA>;                                                            #llegim la sequencia i la enregistrem a una nova variable
while($linia){
    print "$linia";                                                            
    if ($linia =~ /ENS\w+/) {
	chomp($linia);                                                        ##########################################################
	$iden = $linia;	                                                      ## Creem un bucle per anar llegint les diferents linies ##
	$seq_sencera="";                                                      ## Si trobem una linia que es un identificador continuem #
	$linia=<SEQUENCIA>;                                                   ## llegint $linia pero ho guardem en $seq_sencera. Així ##
	$identificador_trobat=0;                                              ## ja podem buscar en la sequencia les repeticions amb  ##
	while (($linia)&&($identificador_trobat==0)){                         ## la funcio repeats.                                   ##
	    chomp($linia);                                                    ########################################################## 
	    $seq_sencera=$seq_sencera.$linia;
	    $linia=<SEQUENCIA>;
	    if (($linia)&&($linia =~/ENS\w+/)) {
		$identificador_trobat=1;
	    }
	}
    }
    repeats();
}
print "$seq_sencera\n";
close(SEQUENCIA);
close(RESULTATS);

sub repeats {

@seq_sen = split(//,$seq_sencera);                                          #posem els elements de la variable $seq_sencera en un vector
$i = 0;                                                                     #Inicialitzem la variable posició
my $repeat_trobat = 0;                                                      #inicialitzem la variable on guardarem si hem trobat repeat
while ($i < scalar (@seq_sen)) {                                            #anem recorrent el vector on tenim la sequencia

    $seq_parcial = substr($seq_sencera,$i);                                 #mirem nomes a partir de una determinada posicio
    $j = 0;
    
    while ($j < 20) {                                                       #anem recorrent el vector que conte els diferents aminoacids
	$aa_ara = $aa[$j];
	if ($seq_parcial =~/^($aa_ara{5,})/) {                              #mirem la existencia de la expressio regular
	    my $llargada = length ($1);                                     #variable per enregistrar la llargada de $1
	    print RESULTATS "$iden\t$aa_ara\t";                             #imprimim l'aminoacid que es repeteix
	    print RESULTATS "$llargada\n";                                  #imprimim la repeticio i la seva llargada
	    $i = $i + length ($1);                                          #si hi ha repeticio ens la saltem
	    $repeat_trobat = 1;
	}
	$j = $j + 1;
    }
    $i = $i + 1;
}
print "\n";
if ($repeat_trobat == 0){
    print RESULTATS "$iden\t\t\n";
}
}
