#!/usr/bin/perl -w

use strict;


#########################################################################
#                                                                       #
#                          LES VARIABLES                                #
#                                                                       #
#########################################################################

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 que anirem recorrent per 
												    #buscar repeticions.
   
my $seq_parcial;										    #linia de sequencia que posteriorment concatenarem entre elles.
my $seq_sencera;										    #variable on concatenarem tota la sequencia on buscarem 
												    #possibles repeticions d'aminoacids.
my $aa;	  											    #variable que determina la posicio del vector @aa en la que 
												    #ens trobem(es a dir, l'aminoacid).
my $identificador;										    #variable on guardarem l'identificador de cada proteina.
my $aarepeat;	  										    #variable que enmagatzema l'aminoacid repetit en aquella
												    #regio de la sequencia.
my $amino;											    #variable on enmagatzem l'aminoacid pel qual busquem 
												    #repeticions en un moment determinat.
my $length;											    #variable que enmagatzema la longitud de la repeticio trobadra.
my $yesno;											    #variable que em comunica si hi ha o no repeticins en aquella
												    #proteina.


open(INPUT, "<$ARGV[0]");
open(OUTPUT,">repetmalalties.txt");

my $seqprot;											    #variable on inicialment colocarem la sequencia concatenada.

my @liniainput = <INPUT>;

my $j;												   #variable amb la que ens anem movent pel fitxer amb format
												   #FASTA.
my $x = 0;											   #conatdor.
my $i;												   #finestra que anem agafant per fragmentar la sequencia i 
												   #facilitar aixi l'analisi

$j = 0;
$seqprot = "";

my $p = 0;


while($j < scalar(@liniainput)){                                                                        
    
    chomp $liniainput[$j];
    
    if( $liniainput[$j] =~ m/>/){
	
	$x = $x +1;										  #per contar per quina proteina anem.
	
	print "ara anem per $x\n";
	$seq_sencera = $seqprot;
	$i = 0;    
	$yesno = 0;
	
	
	while ($i < length($seq_sencera)){							 #analisi de les repeticions d'aminoacids.
	    $seq_parcial = substr($seq_sencera,$i);
	    $p = 0;
	    while($p < scalar(@aa)){
		
		$amino = $aa[$p];
		if ( $seq_parcial =~/^($amino{5,})/) {						#cerca de blocs de repeticions de 5 o mes aminoacids.
		    $aarepeat = $1;
		    $length = length($aarepeat);
		    print OUTPUT "$identificador\tSI\t$aa[$p]\t";				#obtencio de l'output de la manera desitjada, amb les variables
		    print OUTPUT "$length\n";							#que ens interessen.
		    $i = $i + $length;
		    $p=scalar(@aa);								#d'aquesta manera, si troba una repeticio, li diem que ja ha
		    $yesno = $yesno + 1;							#recorregut tot el vector amb els aminoacids.
		}
		$p = $p +1;	
	    }
	    $i = $i + 1; 	    
	}
		
	if ($seqprot) {
	    	if ($yesno==0){
		print OUTPUT "$identificador\tNO\n";
	    }
	}
	
	$identificador = $liniainput[$j];
	$seqprot = "";
    }
    else {
	
	$seqprot = $seqprot.$liniainput[$j];

    }
    
    
    $j =$j + 1;

 
}



												#ara ho fem per la ultima proteina perque de la manera en que hem 
												#el cicle no m'agafa la ultima proteina, per aixo repetim el cicle
$i = 0;    

$seq_sencera = $seqprot;

$yesno = 0;

while ($i < length($seq_sencera)){
    $seq_parcial = substr($seq_sencera,$i);
    $p = 0;

    
    while($p < scalar(@aa)){
	$amino = $aa[$p];
	if ( $seq_parcial =~/^($amino{5,})/) {
	    $aarepeat = $1;
	    my $length = length($aarepeat);
	    print OUTPUT "$identificador\tSI\t$aa[$p]\t";
	    print OUTPUT "$length\n";
	    $i = $i + $length;
	    $p = scalar(@aa);
	    $yesno = $yesno + 1;
	}
	$p = $p +1;	
    }
    $i = $i + 1; 
}

if ($seqprot) {
    
    if ($yesno==0){
	
	print OUTPUT "$identificador\tNO\n";
    }
   
}
