#!/usr/bin/perl -w

use strict;
use warnings;
use IPC::System::Simple qw(capture);

print "Introdueix nom de la proteina:";
my $proteina = <STDIN>;
chomp ($proteina);

#FASTAFETCH

print "Comencem el fastafetch\n";
print "Introdueix el nom de l'scaffold triat:";
my $scaffold = <STDIN>;
chomp ($scaffold);

#Fem una carpeta per cada proteina
#La -p és per si ja existeix la carpeta, no la torna a crear

system ("mkdir -p $proteina.$scaffold");


#Ara escrivim la comanda que fariem en el shell
#Ens coloca l'arxiu dins la carpeta que hem creat abans
    
system ("fastafetch genome.fa genome.index $scaffold > $proteina.$scaffold/$proteina.$scaffold.fastafetch.fa");

print "Fastafetch acabat\n\n";


#FASTASUBSEQ
#Comprovar primer si estem a la cadena normal o a la reverse, per tirar quin número posem com a start

print "Escriu l'inici:";
my $start = <STDIN>;
chomp ($start);

$start = $start - 10000;
print "L'inici es $start\n";

print "Escriu el final:";
my $final = <STDIN>;
chomp ($final);

$final = $final + 10000;
print "El final es $final\n";

#Ens hem d'assegurar que els límits que hem agafat estiguin dins de l'scaffold i que no siguin més petits que 0
#Fem que com a minim sempre hagi de començar per 1, ja que si l'inici és més petit que 10000 i li restem 10000 quedaria més petit que 0

if ($start < 0){
    $start =1;
}

#El límit final també ha d'estar dins de la llargada de l'scaffold
#Primer mirem la llargada del scaffold
my $llargadascaffold = capture ("fastalength $proteina.$scaffold/$proteina.$scaffold.fastafetch.fa | cut -d ' ' -f 1");


#Si el final que hem triat és més gran que l'scaffold, fem que el límit sigui la llargada de l'scaffold
if ($llargadascaffold > $final){
    print "Podem continuar\n";
}
else{
    $final = $llargadascaffold;
    chomp ($final);
    print "La posicio final ha canviat a $final";
}

#Calculem la llargada de la zona que volem analitzar

my $lenght = $final - $start;

system ("fastasubseq $proteina.$scaffold/$proteina.$scaffold.fastafetch.fa $start $lenght > $proteina.$scaffold/$proteina.$scaffold.fastasubseq.fa");

print "fastasubseq acabat\n\n";
 

#EXONERATE

system ("exonerate -m p2g --showtargetgff -q /home/u124036/grup10/$proteina.fa -t $proteina.$scaffold/$proteina.$scaffold.fastasubseq.fa | egrep -w exon > $proteina.$scaffold/$proteina.$scaffold.exon.gff");

print "exonerate acabat \n\n";


#FASTASEQFROMGFF

system ("fastaseqfromGFF.pl $proteina.$scaffold/$proteina.$scaffold.fastasubseq.fa $proteina.$scaffold/$proteina.$scaffold.exon.gff > $proteina.$scaffold/$proteina.$scaffold.pred.nt.fa");

print "fastaseqfromgff acabat\n\n";


#FASTATRANSLATE

system ("fastatranslate -f $proteina.$scaffold/$proteina.$scaffold.pred.nt.fa -F 1 > $proteina.$scaffold/$proteina.$scaffold.pred.aa.fa");

print "fastatranslate acabat\n\n";


#CANVIAR ASTERISCS PER X EN LA PREDICCIÓ PER EVITAR ERRORS

system ("sed 's/*/X/g' $proteina.$scaffold/$proteina.$scaffold.pred.aa.fa > $proteina.$scaffold/$proteina.$scaffold.predX.aa.fa");

print "hem canviat els asteriscs per x\n\n";


#TCOFFEE DES DE EXONERATE

system ("t_coffee /home/u124036/grup10/$proteina.fa $proteina.$scaffold/$proteina.$scaffold.predX.aa.fa > $proteina.$scaffold/$proteina.$scaffold.tcoffe.txt");

print "tcoffee acabat\n\n";


#GENEWISE

my $direction = capture ("cut $proteina.$scaffold/$proteina.$scaffold.exon.gff -f 7 | sed -n 1p");
chomp ($direction);

print "la direccio es: $direction\n";

#Si la direcció es + farem el genewise normal i si la direcció és - amb l'opció -trev

if ($direction eq "+"){
    print "el gen es troba a la cadena fwd\n";
    system ("genewise -pep -pretty -cdna -gff /home/u124036/grup10/$proteina.fa $proteina.$scaffold/$proteina.$scaffold.fastasubseq.fa > $proteina.$scaffold/$proteina.$scaffold.genewise.fa");
}

elsif ($direction eq "-"){
    print "el gen es troba a la cadena rev\n";
    system ("genewise -pep -pretty -trev -cdna -gff /home/u124036/grup10/$proteina.fa $proteina.$scaffold/$proteina.$scaffold.fastasubseq.fa > $proteina.$scaffold/$proteina.$scaffold.genewise.fa");
}

    
print "genewise acabat\n\n";

