#!/usr/bin/perl -w

use strict;



#################################################################################        
#               DEFINIM LES NOSTRES VARIABLES                                   #
#################################################################################
my $descripcio;                      #primera linia del fitxer fasta(identificador i descripcio)
my $idprot1;                         #identificador prot ensembl

my $gc;                              #contingut gc
my @taula;                           #matriu que conte la informacio d'ensembl
                                     #que ens interessa

my $seqprot;                         #per concatenar la seq a l'identificador
my $seqseguida;                      #sequencies concatenades
my $input;                           #fitxer fasta


open(CARACT,"<$ARGV[0]");

$input=$ARGV[1];
print "input: $input\n";
open (SEQ, "<$input");

my $i = 0;

while (<CARACT>){
    
    
    
    if(/(ENSP.*?)\.\d+\s+(\d+)\s$/){	#expressio regular amb la que selecciones l'identificador de la proteina i el contingut GC
	
	
	$idprot1 = $1;			#els coloquem en variables diferents
	$gc = $2;
	
	
	
	$taula[$i][0] = $idprot1;
	$taula[$i][1] = $gc;

	$i = $i +1;
    }
    
}


print "tenim $i proteines\n";		#manera de tenir un contador mentres el programa va recorrent el fitxer.


open(OUT,">outputconserv2.txt");	#obro el fitxer de sortida.

my @liniafasta = <SEQ>;			#coloquem el fitxer d'ensembl dins d'un vector.
  

my $j = 0;                     #variable per anar recorrent les linies del fitxer fasta

my $id;                        #variable que enregistra l'identificador de l'ensembl(per comparar-lo amb el del fasta)
my $x = 0;                     
my $proteina_bona=0;           #variable que ens verifica si hi ha hagut un match entre els identificadors



$descripcio=$liniafasta[0];


while ($x < $i){		#primer ho fem per la primera proteina perque sino no ens l'agafaria, despres el seguent bucle l'apliquem per totes.

    $id = $taula[$x][0];
    
    if ($descripcio =~ /$id/) {
	
	$proteina_bona=1;

	}

    $x=$x+1;

}

$j=1;




while ($j < scalar(@liniafasta)) {
    
    
    if ($liniafasta[$j] =~ m/>/){	
	
	print "estem a la proteina $j de $i\n";		#contador.
	
                if ($proteina_bona==1){
		    
		    print OUT "$descripcio\n";
		    print OUT "$seqseguida\n";
		}
	
		
	$proteina_bona=0;				#inicialitzo les dues variables.
	$seqseguida="";
	
	
	$descripcio=$liniafasta[$j];
	
	$x=0;
	while ($x < $i){
	    
	    $id = $taula[$x][0];
	    
	    if ($descripcio =~ /$id/) {
		
		$proteina_bona=1;
	    }
	    
	    
	    $x = $x +1;	
	    
	}
	
    }
    
    

    $j = $j +1;	
    
}



close(OUT);

close (CARACT);

close (SEQ);
