#!/usr/bin/perl -w

use strict;


my $input_file1;
my $input_file2;
my @protid;
my $protid;
my $p;  #variable q recorre el vector protid
my $detector;
my $id;


if (scalar(@ARGV) < 2) #si al ejecutar el programa no has dado el nombre del fichero,imprime error y cierra
	{
	print STDERR "entrar: nom_del_programa fitxer1 fitxer2\n";
	exit(1);
	}

$input_file1=$ARGV[0]; #llama input file al fichero que esta en la posicion 0 del vector argv
$input_file2=$ARGV[1];


#print "input_file1: $input_file1\n"; #imprime los ficheros que se han abierto para ejecutar el programa
#print "input_file2: $input_file2\n";
 

             #################################################################################################################
             # PRIMERA PARTE: EL PROGRAMA FILTRA LOS IDENTIFICADORES DE PROTEINAS DEL RESTO DE IDENTIFICADORES (input_file1) #
             #################################################################################################################

open(IN,"<$input_file1") || die " cannot open input file1\n";      #si el fichero no se puede abrir, imprime esto y cierra el programa


$p = 0;

while () { #mientras haya lineas para leer

     
    if (($_ =~m/(ENSP[0-9]+)/) || ($_ =~m/(SINFRUP[0-9]+)/) || ($_ =~m/(ENSGALP[0-9]+)/) || ($_ =~m/(GSTENP[0-9]+)/)) {

       $protid[$p] = $1;    #guarda los identificadores validos en un vector 
       $p = $p + 1;
    }
} 
   
close(IN);  #cierra el programa


            #######################################################################################################################
            # SEGUNDA PARTE: EL PROGRAMA ASIGNA LA SECUENCIA(input_file2) CORRESPONDIENTE AL IDENTIFICADOR DE PROT (input_file1)  #
            #######################################################################################################################


$detector = 0;
$p = 0;

while ($p < scalar(@protid)) {     #recorre el vector con los identificadores que nos interesan

open(IN,"<$input_file2") || die " cannot open input file2\n";


 while() {              #mientras haya lineas para leer
    
 
  if ($_=~m/(^>)/) {        #si la linea empieza con un <, es decir es fasta
        
     $id = "";
     $detector =0;      

      if (($_ =~m/(ENSP[0-9]+)/)||($_ =~m/(SINFRUP[0-9]+)/)||($_ =~m/(ENSGALP[0-9]+)/)||($_ =~m/(GSTENP[0-9]+)/))  {
	
	  $id = $1;                          #si es un identificador guardalo en esta variable
      
	  if ($id eq $protid[$p]) {          #compara este identificador con el del vector, si son iguales imprime
	      print "\n>$id\n";
              $detector = 1;                 #detector para seƱalar las lineas que siguen a fastas validos
          }
      } 
   }

  else {                                     #si no es un fasta

      if ($detector == 1) {                  #pero le sigue a un fasta valido, es la secuencia perteneciente al identificador valido
          chomp $_;      
          print "$_";                        #imprimelo   
      }
  }
 }

close(IN);  #cierra el programa

$p= $p + 1;

}