#!/usr/bin/perl -w

use strict;


my $query;            # variable que contiene en nombre de la proteina problema

my $subject;          # variable que contiene información sobre la región cromosómica predicha

my $features1;        # variable que recoge información sobre el score, e-value y sum p de la
                      # alineación

my $features2;        # variable que recoge información sobre la similaritud del alineamiento y 
                      # la pauta de lectura  

my @v;                # vector que contiene la secuencia aminoacídica de la proteína problema (query) 

my $i ;               # variable que recorre los índices del @v  que contiene la secuecia aminoacídica
                      # de la proteína problema

my @m;                # vector que cotiene todas aquellas posiciones en las que se encuentra un asterísco
                      # en la secuencia problema

my @w;                # vector que contiene la secuencia aminoadídica de la región cromosómica predicha

my $contador;         # variable que nos permite recorrer todos los índices del @m

my $pista;            # variable chivato que nos indica que ha encontrado una alineación
                      # que nos interesa ** o *C

my $x = 0;            # variable que va a adquirir un número que indica en qué posición se ha encontrado
                      # en el @v un asterísco





while (<>) {                             # con este bucle vamos a ser capaces de ir recorriendo todas la líneas
                                         # del archivo de salida del tBLASTn y nos quedaremos con aquellas 
                                         # líneas de interés para llevar a cabo el proyecto

                     
    if ($_=~m/Query=\s+(.*)/) {          # este if permite extraer la información que se encuentra tras la 
                                         # expreión regular "Query= " y asignarle la variable $query
	$query = $1;

}


    if ($_=~m/>(.*)/) {                  # en este caso nos interesa la información que viene a continuación de
                                         # ">" que contiene información sobre la región cromosómica predicha y la
	$subject = $1;                   # guardamos en la variable $subject

}


    if ($_=~m/Score(.*)/) {              # este paso permite obtener información sobre el score, e-value y sum p de 
                                         # la alineación, para eso utilizamos las expresión regular "Score" e 
	$features1= $1;                  # introducimos lo que se encuentra inmediatemente a continuación de Score 
                                         # se guarda en la variable $features1
}


    if ($_=~m/Identities(.*)/) {         # este paso consite en lo mismo que el anterior solo que la expresión regular
                                         # que utilizamos para quedarnos con la información de la línea es "Identities"
	$features2= $1;                  # y lo que se encuentra inmediatamente a continuación de Identities se 
                                         # guarda en la variable $features2
}


    if ($_=~m/Query:\s+\d+\s+(.*)\s+\d+/) {         # en este caso, mediante la expresión regular conseguimos la 
                                                    # secuencia aminoacídica de la selenoproteína problema y la 
	$i=0;                                       # introducimos en el @v mediante el comando split. Una vez que tenemos
                                                    # la secuencia en un vector nos interesa saber cuales son las 
	@v=split(//,$1);                            # posciciones en las que se halla un *, en el caso de que esa secuencia
                                                    # tenga un asterisco. Por tanto, recorremos el vector y almacenamos
                                                    # las  posiciones de la secuencia problema en la que se halla un
	@m=();                                      # asterísco y las introducimos en el @m mediante la función
                                                    # "push @m, $i;"

	while ($i < scalar(@v)){

	    if ($v[$i] eq "\*"){

		push @m, $i;

	    }

	    $i = $i + 1;

}}


    if ($_=~m/Sbjct:\s+\d+\s+(.*)\s+\d+/) {                # mediante esta expresión regular se consigue la
                                                           # secuencia aminoacídica de la región cromosómica 
	@w=split(//,$1);                                   # predicha y la introducimos en el @w. Ahora nos interesa 
                                                           # recorrer el @m para buscar en el @w, aquellas posiciones 
	$contador = 0;                                     # en las que en el @v hemos encontrado un * y comprobar la 
                                                           # existecia de un * o una C.Y si esta condición se cumple
	$pista = 0;                                        # que nos de todos los parametro que corresponden a esta
                                                           # alineación como, $query, $subject, $features1, $features2
	$x = 0;                                            # @v y @w. Para que el programa pare en el momento en que 
                                                           # que encuentra un ** o *C, hemos introducido un chiva 
	while($contador < scalar(@m) && $pista == 0){      # que lo llamamos $pista y que cambia de número en el 
                                                           # momento en que se encuentra un ** o *C
	    $x=$m[$contador];


	    if (($w[$x] eq "\*") || ($w[$x] eq "C")){

		$pista = 1;


		print "query: $query\n";

		print "subject: $subject\n";

		print "score $features1\n";
		
		print "identities $features2\n";

		print "vector q: ";
		map{print "$_"; }@v;
		print "\n";

		print "vector q: ";
		map{print "$_"; }@w;
		print "\n";
		print "\n========================================================\n";
}

	    $contador = $contador+1;
}
}
} 

###########################################################################################################################
######################################################  OBJETIVO  #########################################################
###########################################################################################################################
#################### Mediante este programa conseguimos extraer una única línea de la alineación,########################## 
#################### ya que el propósito del programa es conseguir información sobre cual es la ###########################
#################### región del genoma (contig) de Pan troglodytes en el que se encuentra la Sec ##########################
#################### que alinea con la Sec humana y por tanto una región potencial de codificar ###########################
################################################ para una selenoproteína###################################################
###########################################################################################################################
###########################################################################################################################

