#!/usr/bin/perl -w
#perque funcioni el programa has de ser a dins la carpeta on està la query

use strict;

############  Canvia les U per X  ############

my $query;
my @proteina;
my $lv;
my $pv;
my $cl;
my $querynova;
my $siono; # ens servirà per dir-li al programa si volem o no canviar les X

print "############  Canvia les U per X  ############ \n";
print "Vols canviar les U per X? \n";
$siono = <STDIN>;
chomp ($siono);
print " \n";

if ($siono eq "si"){

$cl = 0; #comptador línies, perque no entri a la primera línia del fitxer fasta

print "Quina query vols obrir? (escriu el nom AMB la terminacio .fa) \n";
$query = <STDIN>;
print " \n";

if (-e "querynova" && -s "querynova" != 0){
print "La query ja està preparada per fer el blast! \n";
print " \n";
} 
else {
print "Modificant la query... \n";
print " \n";

open (QUERY,"<$query");
$querynova = "querynova";
chomp;
open (QUERYNOVA,">$querynova");
while (<QUERY>){
chomp;
$pv = 0;
@proteina = split (//,$_);
$lv = scalar (@proteina);
    if ($cl != 0){
	while ($pv < $lv) {
		if ($proteina[$pv] eq 'U') {    
		    $proteina[$pv]= s/U/X/g;
		}
		if ($proteina[$pv] eq '@') {
			$proteina[$pv] = s/@/X/g;
		}
		if ($proteina[$pv] eq '#') {
			$proteina[$pv] = s/#//g;
		}
	    $pv = $pv + 1;
	} #tanques el while
    } #tanques el if 
    else {
	$cl = $cl + 1;
    } #tanques el else
print QUERYNOVA "$_ \n";
}#tanques el while
close (QUERY);
close (QUERYNOVA);

print "La query ja està preparada per fer el blast! \n";
print " \n";
} #tanques el if inicial
} #tanques el if del $siono
else {
   print "Quina query vols obrir? (escriu el nom AMB la terminacio .fa) \n";
   $query = <STDIN>;
   chomp ($query);
   print " \n";
   system('/bin/bash', '-c', qq(cp '$query' 'querynova'));
}

########  BLAST  #########

print "############  BLAST  ############ \n";
print "Fent el blast... \n";
if (-e "querynova_tblastn"  && -s "querynova_tblastn" != 0){
    print "Blast fet!";
    print " \n";
}
else {
system ("blastall -p tblastn -i querynova -d /cursos/BI/genomes/vertebrates/2014/Condylura_cristata/genome.fa -o querynova_tblastn -e 1e-04 -m8");
print "Blast fet! \n";
print " \n";
}
print " \n";

############  FASTA INDEX  ############

print "############  FASTA INDEX  ############ \n";
print "Passem a fer l'index del genoma de Condylura. \n";
print "Per estalviar temps, si ja està fet no el faré! \n";
print " \n";

if (-e "Condylura.index" && -s "Condylura.index" != 0){
	print "Comprovat: l'índex ja existeix! \n";
	print " \n";
   }
else {
    print "Comprovat: índex per fer! \n";
    print "Ara el faig, el procés pot ser llarg... \n";
    print " \n";
    system('/bin/bash', '-c', qq(fastaindex /cursos/BI/genomes/vertebrates/2014/Condylura_cristata/genome.fa Condylura.index)); 
    print "Índex fet! \n";
    print " \n";
}


############  FASTA FETCH  ############

my $sino; #ens servirà per dir-li si volem fer el fastafetch
my $regio; #ens servirà per dir-li al fastafetch on es troba el nostre hit
my $i; #ens servirà per donar noms a la carpeta dels fastafetch

$i = 1;
print "############  FASTA FETCH  ############ \n";
print "Vols que extregui la regió del genoma on es troba el hit d'interès? \n";
$sino = <STDIN>;
chomp ($sino);
print " \n";

if ($sino eq 'si'){
print "Per fer-ho necessito que em diguis quina és aquesta regió. \n";
print "Per això et mostro els resultats del blast: \n";
print " \n";
system ('/bin/bash', '-c', qq(more querynova_tblastn));
print " \n";

print "Quina regió vols que extregui? \n";
$regio = <STDIN>;
chomp ($regio);
print " \n";

system ("fastafetch /cursos/BI/genomes/vertebrates/2014/Condylura_cristata/genome.fa Condylura.index '$regio' > 'querynova_fastafetch${i}'");
print "Primer fastafetch fet! \n";
print "Vols extreure una altra regió? \n";
$siono = <STDIN>;
chomp ($siono); #ens servirà per dir-li al programa si volem extreure una altra regió
print " \n";

while ($siono eq 'si'){
    $i = $i + 1;
    system ('/bin/bash', '-c', qq(more querynova_tblastn));
    print " \n";
    print "Quina regió vols que extregui? \n";
    $regio = <STDIN>;
    chomp ($regio);
    print " \n";
    system ("fastafetch /cursos/BI/genomes/vertebrates/2014/Condylura_cristata/genome.fa Condylura.index '$regio' > 'querynova_fastafetch${i}'");
    print "Vols extreure una altra regió? \n";
    $siono = <STDIN>;
    chomp ($siono);
    print " \n"; 
}
} #tanques el if inicial que et pregunta si vols fer o no el fastafetch


############  FASTA SUBSEQ  ############

my $start;
my $resta;
my $end;
my $length;
my $a;

print "############  FASTA SUBSEQ  ############ \n";
print "Vols fer el fastasubseq? \n";
$siono = <STDIN>;
chomp ($siono);
print " \n";

if ($siono eq "si"){
print "De quina regió vols extreure la subseqüència? (número de fastafetch?) \n" ;
$i = <STDIN>;
chomp ($i);
print " \n";

print "Aquesta serà la subseqüència número...\n";
$a = <STDIN>;
chomp ($a);
print " \n";

system ('/bin/bash', '-c', qq(more querynova_tblastn));
print " \n";

print "Quin serà el nucleòtid inicial? (llegeix al blast de sobre!) \n";
$start = <STDIN>;
chomp ($start);
print " \n";

if ($start > 50000){
    $start = $start - 50000;
}
else {
    print "Vigila! El primer nucleòtid és més petit que 50.000! Quant vols que li resti? \n";
    $resta = <STDIN>;
    chomp ($resta);
    print " \n";
    $start = $start - $resta;
}

print "En quina posició està el nucleòtid final? \n";
$end = <STDIN>;
chomp ($end);
print " \n";

print "Quina vols que sigui la llargada de la subseqüència? \n";
$length = <STDIN>;
chomp ($length);
$length = $length + ($end-$start);
print " \n";

system ('/bin/bash', '-c', qq(fastasubseq 'querynova_fastafetch${i}' '$start' '$length' > 'querynova_fastafetch${i}_fastasubseq${a}'));

print "Vols extreure una altra subseqüència? \n";
$siono = <STDIN>;
chomp ($siono);
print " \n";

while ($siono eq 'si'){
    
print "De quina regió vols extreure la subseqüència? (número de fastafetch?) \n" ;
$i = <STDIN>;
chomp ($i);
print " \n";

print "Aquesta serà la subseqüència número...\n";
$a = <STDIN>;
chomp ($a);
print " \n";

system ('/bin/bash', '-c', qq(more querynova_tblastn));
print " \n";

print "Quin serà el nucleòtid inicial? (llegeix al blast de sobre!) \n";
$start = <STDIN>;
chomp ($start);
print " \n";

if ($start > 50000){
    $start = $start - 50000;
}
else {
    print "Vigila! el primer nucleòtid és més petit que 50.000! Quant vols que li resti? \n";
    $resta = <STDIN>;
    chomp ($resta);
    print " \n";
    $start = $start - $resta;
}

print "En quina posició està el nucleòtid final? \n";
$end = <STDIN>;
chomp ($end);
print " \n";

print "Quina vols que sigui la llargada de la subseqüència? \n";
$length = <STDIN>;
chomp ($length);
$length = $length + ($end-$start);
print " \n";

system ('/bin/bash', '-c', qq(fastasubseq 'querynova_fastafetch${i}' '$start' '$length' > 'querynova_fastafetch${i}_fastasubseq${a}'));

print "Vols extreure una altra subseqüència? \n";
$siono = <STDIN>;
chomp ($siono);
print " \n";
}
}

############  EXONERATE  ############

$i = 1;
print "############  EXONERATE  ############ \n";
print "Ja tenim tots els fastasubseq, faré l'exonerate i el t_coffee amb la regió $i i les seves subseqüències \n";
print " \n";

$siono = "si";

while ($siono eq 'si'){ 
$a = 1;

print "querynova_fastafetch${i}_fastasubseq${a} \n";
    while (-e "querynova_fastafetch${i}_fastasubseq${a}" && -s "querynova_fastafetch${i}_fastasubseq${a}" != 0){

	system('/bin/bash', '-c', qq(exonerate -m p2g --showtargetgff --exhaustive -q querynova -t 'querynova_fastafetch${i}_fastasubseq${a}' > 'querynova_fastafetch${i}_fastasubseq${a}_exonerate.gff'));

	system('/bin/bash', '-c', qq(egrep -w exon 'querynova_fastafetch${i}_fastasubseq${a}_exonerate.gff' > 'querynova_fastafetch${i}_fastasubseq${a}_cDNA.gff'));

	system('/bin/bash', '-c', qq(fastaseqfromGFF.pl 'querynova_fastafetch${i}_fastasubseq${a}' 'querynova_fastafetch${i}_fastasubseq${a}_cDNA.gff' > 'querynova_fastafetch${i}_fastasubseq${a}_cDNA.fa'));

	system('/bin/bash', '-c', qq(fastatranslate -F 1 'querynova_fastafetch${i}_fastasubseq${a}_cDNA.fa' > 'querynova_fastafetch${i}_fastasubseq${a}_proteina.mfa'));

	system('/bin/bash', '-c', qq(t_coffee 'querynova' 'querynova_fastafetch${i}_fastasubseq${a}_proteina.mfa' > 'querynova_fastafetch${i}_fastasubseq${a}_tcoffee'));
	$a = $a + 1; 
	}
$i = $i + 1;
print " \n";
print "Has extret més regions amb el fastafetch? \n";
$siono = <STDIN>;
chomp ($siono);
}    

###############    GENEWISE   #############

print "###############    GENEWISE   ############# \n";
print "Vols intentar fer el Genewise encara que no surti mai? \n";
$siono = <STDIN>;
chomp ($siono);
print " \n";

$i = 1;
while ($siono eq "si"){ 
$a = 1;
    while (-e "querynova_fastafetch${i}_fastasubseq${a}" && -s "querynova_fastafetch${i}_fastasubseq${a}" != 0){
	system('/bin/bash', '-c', qq(genewise -pep -pretty -cdna -gff -both querynova 'querynova_fastafetch${i}_fastasubseq${a}' > 'querynova_fastafetch${i}_fastasubseq${a}_genewise.gff'));
$a = $a + 1; 
	}
$i = $i + 1;
print "Has extret més regions amb el fastafetch? \n";
$siono = <STDIN>;
chomp ($siono);
print " \n";
}    

