#!/usr/bin/perl -w

use strict;

my $filename;	# Nom del filtxer
my $oldcon;	# Nom del contig vell
my $newcon;	# Nom del contig nou
my $posi;	# Posició inicial del contig
my $posf;	# Posició final del contig
my @row;	# Vector on es guarda la línia del resultat del blast
my @lastrow;	# Vector on guardem la línia que no es llegeix en el while
my $fam;	# Família o subfamília de selenoproteïnes
my $len;	# Llargada de la seqüència


print "Amb quina subfamília de selenoproteïnes estàs treballant? En cas que no n'hi hagi posa el mateix nom de la família. ";
$fam = <STDIN>;
chomp($fam);

# Donem posicions inicials i valor inicial al oldcon (sino no podem fer comparacions)
$oldcon = 0;
$posi = 9999999999;
$posf = 0;

# Obrim l'arxiu del tblastn
open(my $fh, '<:encoding(UTF-8)', "./Blast/$fam.tblastn.txt")
  or die "Could not open file '$fam' $!";

# Canvi de U per X a la query de ZF
system ("sed s/U/X/g /export/home/u114489/Treball/Blast/ZF/$fam.fa > /export/home/u114489/Treball/Blast/ZF/$fam.X.fa");


while (my$row = <$fh>) {	# Mentre l'arxiu tingui contingut llegeix línia per línia
    chomp($row);
    @row = split ("\t",$row);	# Guarda el contingut de la línia en un vector, cada tabulació en una posició

    if ($oldcon eq "0") {	# Només per la primera iteració guarda el contig de la línia a oldcon
	$oldcon = $row[1];
    }

    $newcon = $row[1];		# Guarda el contig de la línia

    if ($oldcon ne $newcon) {	# Quan el contig canvia, allarga les posicions, calcula la longitud i procedeix a executar a partir del fastafetch fins a TCoffee
	$posi = $posi-50000;
	$posf = $posf+50000;
	$len = ($posf)-($posi);
	
	system ("mkdir $fam.$oldcon");

	system ("fastafetch  /cursos/20428/BI/genomes/2017/Oncorhynchus_mykiss/genome.fa /cursos/20428/BI/genomes/2017/Oncorhynchus_mykiss/genome.index $oldcon > $oldcon.fa");

	print "Fastafetch fet\n";

	system ("fastasubseq $oldcon.fa $posi $len > genomic.$oldcon.fa");

	print "Fastasubseq fet\n";

	system ("exonerate -m p2g --showtargetgff -q /export/home/u114489/Treball/Blast/ZF/$fam.X.fa -t genomic.$oldcon.fa | egrep -w exon > $fam.OM.$oldcon.gff");

	print "Exonerate fet\n";

	system ("fastaseqfromGFF.pl genomic.$oldcon.fa $fam.OM.$oldcon.gff > $oldcon.nuc.fa");

	print "FastaseqfromGFF fet\n";

	system ("fastatranslate $oldcon.nuc.fa -F 1 > $oldcon.pep.fa");

	print "Fastatranslate fet\n";

	system ("sed s/*/X/g $oldcon.pep.fa > $oldcon.pepX.fa");

	system ("t_coffee $oldcon.pepX.fa /export/home/u114489/Treball/Blast/ZF/$fam.X.fa > $oldcon.tcoffee.txt");

	# Mou tots els fitxers creats a una carpeta amb el nom de la família i el contig
	
	system ("mv $oldcon.fa $fam.$oldcon");
	system ("mv genomic.$oldcon.fa $fam.$oldcon");
	system ("mv $fam.OM.$oldcon.gff $fam.$oldcon");
	system ("mv $oldcon.nuc.fa $fam.$oldcon");
	system ("mv $oldcon.pep.fa $fam.$oldcon");
	system ("mv $oldcon.pepX.fa $fam.$oldcon");
	system ("mv $oldcon.pepX.aln $fam.$oldcon");
	system ("mv $oldcon.pepX.html $fam.$oldcon");
	system ("mv $oldcon.tcoffee.txt $fam.$oldcon");

	# Reinicia les posicions per a seguir amb el nou contig
	$posi = 9999999999;
	$posf = 0;
    }
	
	# Es queda amb la posició més petita i la més gran del contig
	if ($row[8] < $posi) {
	    $posi = $row[8];
	}
	if ($row[8] > $posf) {
	    $posf = $row[8];
	}
       	if ($row[9] < $posi) {
	    $posi = $row[9];
	}
	if ($row[9] > $posf) {
	    $posf = $row[9];
	}

    $oldcon = $newcon;		# Guardem el nom del contig per a comparar en la línia següent
}
if ($row[8] < $posi) {
    $posi = $row[8];
	}
if ($row[8] > $posf) {
    $posf = $row[8];
}
if ($row[9] < $posi) {
    $posi = $row[9];
}
if ($row[9] > $posf) {
    $posf = $row[9];
}

# Per la última línia no s'executa el programa, així que hem de posar una copia a fora del while
$posi = $posi-50000;
$posf = $posf+50000;
$len = ($posf)-($posi);
	
system ("mkdir $fam.$oldcon");

system ("fastafetch  /cursos/20428/BI/genomes/2017/Oncorhynchus_mykiss/genome.fa /cursos/20428/BI/genomes/2017/Oncorhynchus_mykiss/genome.index $oldcon > $oldcon.fa");

print "Fastafetch fet\n";

system ("fastasubseq $oldcon.fa $posi $len > genomic.$oldcon.fa");

print "Fastasubseq fet\n";

system ("exonerate -m p2g --showtargetgff -q /export/home/u114489/Treball/Blast/ZF/$fam.X.fa -t genomic.$oldcon.fa | egrep -w exon > $fam.OM.$oldcon.gff");

print "Exonerate fet\n";

system ("fastaseqfromGFF.pl genomic.$oldcon.fa $fam.OM.$oldcon.gff > $oldcon.nuc.fa");

print "FastaseqfromGFF fet\n";

system ("fastatranslate $oldcon.nuc.fa -F 1 > $oldcon.pep.fa");

print "Fastatranslate fet\n";

system ("sed s/*/X/g $oldcon.pep.fa > $oldcon.pepX.fa");

system ("t_coffee $oldcon.pepX.fa /export/home/u114489/Treball/Blast/ZF/$fam.X.fa > $oldcon.tcoffee.txt");

	

system ("mv $oldcon.fa $fam.$oldcon");
system ("mv genomic.$oldcon.fa $fam.$oldcon");
system ("mv $fam.OM.$oldcon.gff $fam.$oldcon");
system ("mv $oldcon.nuc.fa $fam.$oldcon");
system ("mv $oldcon.pep.fa $fam.$oldcon");
system ("mv $oldcon.pepX.fa $fam.$oldcon");
system ("mv $oldcon.pepX.aln $fam.$oldcon");
system ("mv $oldcon.pepX.html $fam.$oldcon");
system ("mv $oldcon.tcoffee.txt $fam.$oldcon");
