#!/usr/bin/perl -w

my %hash;
open (my $FILE,"<", "/home/u137251/Desktop/gen_len.txt") or die "Can't open\n"; #creació d'una taula de hash amb el nom de tots els scaffolds i llargada corresponent
#####################################CANVIAR USUARI##############################################

while(my $row =<$FILE>){
    chomp $row;
    my @linea = split(/\t/, $row);
    $hash{$linea[1]}=$linea[0];
}
close($FILE);


my @protein; #creem un vector on hi ha tots els noms dels fitxers de les selenoproteines presents a l animal de referencia en humans
my $i; #iteracio per anar llegint les posicions del vector
my $llargada; 
@protein=("GPx1.fa","GPx2.fa","GPx3.fa","GPx4.fa","GPx5.fa","GPx6.fa","GPx7.fa","GPx8.fa");
$llargada=scalar @protein;
$i=0;

while ($i<$llargada){
print "analitzant proteina $protein[$i]\n";

system ("sed s/U/X/g ${protein[$i]} > temp; mv temp ${protein[$i]} -f"); #canvi de les U per X al fitxer fasta de la proteina
system ("sed s/\%//g ${protein[$i]} > temp; mv temp ${protein[$i]} -f"); 
system ("sed s/@//g ${protein[$i]} > temp; mv temp ${protein[$i]} -f");
system ("sed s/\#//g ${protein[$i]} > temp; mv temp ${protein[$i]} -f");


my $nomprotblastentregar;
$nomprotblastentregar="${protein[$i]}nuc.blast.entregar"; #posem nom al fitxer resultant del TBLASTN
my $nomprotblast;
$nomprotblast="${protein[$i]}nuc.blast";

system ("/mnt/NFS_UPF/soft/ncbi-blast-2.7.1+/bin/tblastn -query ${protein[$i]} -db /mnt/NFS_UPF/soft/genomes/2019/Kobus_ellipsiprymnus/genome.fa -outfmt 6 -evalue 0.0001 -out ${nomprotblast}");
########################################################################################TBLASTN versio resumida ##############################################################################

system ("/mnt/NFS_UPF/soft/ncbi-blast-2.7.1+/bin/tblastn -query ${protein[$i]} -db /mnt/NFS_UPF/soft/genomes/2019/Kobus_ellipsiprymnus/genome.fa -out ${nomprotblastentregar}");
########################################################################################TBLASTN versio completa #############################################################################

print "a continuació apareixerà per pantalla el resultat d'executar el tblastn buscant $protein[$i] en el genoma de Ke\n";
my $nomprotblast_sorted;
$nomprotblast_sorted = "${nomprotblast}_sorted";

system ("cat $nomprotblast");

#l'usuari inserta el nom del scaffold que vol analitzar, l'inici (per defecte, la primera columna, encara que el hit estigui a la cadena negativa) i el final (seguent columna)
print "inserta nom del hit: \n";
$nomdelhit=<STDIN>;
chomp ($nomdelhit);
print "inserta inici: \n";
$inici=<STDIN>;
chomp ($inici);
print "inserta final: \n";
$final=<STDIN>;
chomp ($final);

#el programa avalua si el hit analitzat es troba a la cadena + o - i ho imprimeix per pantalla, sera important per l'analisi dels Secis
if ($inici<$final){
    print "el hit analitzat es troba a la cadena positiva \n";
}
if ($inici>$final){
    $inici=$final;
    print "el hit analitzat es troba a la cadena negativa \n";
}

$inici=$inici - 100000; #analitzarem 100.000nt per davant i per darrere de l'inici

if ($inici<0)#comprovacio de que la variable $inici no prengui un valor negatiu 
{
$inici=0;
}

$length=200000; ###com a defecte la llargada es 200000

if (($inici+$length)>$hash{$nomdelhit}){  ###si inici + llargada es major que la llargada del scaffold, el valor que s'agafara sera la llarga del scaffold
$length=$hash{$nomdelhit};
$length = $length - $inici -5;
}

print "l inici es: $inici\n";  #control del correcte funcionament del programa

print "la llargada es: $length \n"; #control del correcte funcionament del programa

$nomdelhitfa ="${nomdelhit}.fa";
$genomic_nomdelhit="genomic_${nomdelhit}"; 

print "ara fem fastafetch de la proteina $protein[$i]\n";
system ("/mnt/NFS_UPF/soft/exonerate/exonerate-2.2.0-x86_64/bin/fastafetch /mnt/NFS_UPF/soft/genomes/2019/Kobus_ellipsiprymnus/genome.fa /mnt/NFS_UPF/soft/genomes/2019/Kobus_ellipsiprymnus/genome.index $nomdelhit > $nomdelhitfa");
############################################################################FASTAFETCH################################################################################################


print "ara fem el fastasubseq de la proteina $protein[$i]\n";
system ("/mnt/NFS_UPF/soft/exonerate/exonerate-2.2.0-x86_64/bin/fastasubseq $nomdelhitfa $inici $length > $genomic_nomdelhit");
############################################################################FASTASUBSEQ###############################################################################################
$exonerate_nomdelhit="exonerate_${nomdelhitfa}";

print "ara fem l exonerate de la proteina $protein[$i]\n";
system ("/mnt/NFS_UPF/soft/exonerate/exonerate-2.2.0-x86_64/bin/exonerate -m p2g --showtargetgff -q /home/u137251/Desktop/$protein[$i] -t $genomic_nomdelhit > $exonerate_nomdelhit");
#################################################################################################CANVIAR USUARI##############################################################
###########################################################################EXONERATE#########################################################################################

$nomdelhitgff ="${nomdelhit}.gff";
system ("egrep -w exon $exonerate_nomdelhit > $nomdelhitgff");

$pred="pred_prot_${nomdelhitfa}.fa";
system ("/mnt/NFS_UPF/soft/fasta/fastaseqfromGFF.pl $genomic_nomdelhit $nomdelhitgff > $pred");
###########################################################################FASTASEQFROMGFF####################################################################################

$protpred="prot_pred_${nomdelhitfa}";

print "ara fem fastatranslate de la proteina $protein[$i]\n";
system ("/mnt/NFS_UPF/soft/exonerate/exonerate-2.2.0-x86_64/bin/fastatranslate -f $pred -F 1 > $protpred");
###########################################################################FASTA TRANSLATE####################################################################################
system ("sed s/*/X/g ${protpred} > temp; mv temp ${protpred} -f"); #canvi de * per X

print "ara fem tcoffee de la proteina $protein[$i]\n";
system ("/mnt/NFS_UPF/soft/tcoffee/bin/t_coffee /home/u137251/Desktop/$protein[$i] $protpred");
#################################################################################################CANVIAR USUARI##############################################################
###########################################################################T COFFEE##########################################################################################

print "hem acabat l'analisi de la proteina $protein[$i]\n";
$i=$i+1; #el programa es torna a repetir per la seguent proteina, fins arribar al final del vector creat inicialment
}
print "el programa ha acabat\n";

