#!/usr/bin/perl -w

use strict;

#Lobjectiu daquest programa es fer servir el programa Castillo-Davis per obtenir el alinimanet locals entre homosapiens i 12 especies mes i transformar les dades que provenen del programa Castillo-Dacvis en format gff, per a poder obtenir grafics i continuar els passis seguents delt reball. 

my @fitxers; #En aquest vector hi posarem els noms de tots els fitxers que volem             executar amb el programa Castillo-Davis. 

my $i = 1; #Ens serveix per recorrer el hash on hi ha el nom de les nostres seq.

my $fileOut; #Aqui hi ha el resultat del programa Castillo-Davis.

my $ki; #Enregistra el nom de la seq que estem aliniant amb homo sapiens. 

my $err; #Variable que utilitzem per executar el progrmaa Castillo-Davis. 

#El seguent grup de variables serveix per aconseguir que le fitxer de sortida del programa tingui el format gff. En cada variable hi emnresitrem una de les informacions que necessitarem.

my $inici1; #Enregistra linici de lqalinimanet local a la seq1. 
my $final1; #Enregistra el final de lalinimanet local a la seq1.
my $inici2; #Enregistra linici de lalinimanet loical a la seq2.
my $final2; #Enregistra final de laliniamnet local a la seq2.
my $length; #Enregistra la llargada del fragment.


my @info; #Enregistra el vector on hi haura la informacio en format gff. A cada           posicio hi haura informacio sobre un aliniament local.

my $j = 0; #Permet anar recorrent les posicions del vector @info.

my %especies = ("homosapiens" =>"ENSG00000111199",
		"bostaurus"=> "ENSBTAG00000000031",
		"daniorerio"=>"ENSDARG00000018242",
		"tetraodonnigroviridis"=>"GSTENG00029525001",
		"musmusculus"=>"ENSMUSG00000014158",
		"fugurubripes"=>"NEWSINFRUG00000145973",
		"canisfamiliaris"=>"ENSCAFG00000010796",
		"rattusnorvegicus"=>"ENSRNOG00000001195",
		"monodelphisdomestica"=> "ENSMODG00000004471",
		"macacamulatta"=>"ENSMMUG00000003942",
		"xenopustropicalis_seq1"=>"ENSXETG00000018609",
		"xenopustropicalis_seq2"=>"ENSXETG00000018609",
		"pantroglodytes"=>"ENSPTRG00000005430",
		"gallusgallus_seq1"=>"ENSGALG00000005152",
		"gallusgallus_seq2"=>"ENSGALG00000005152");

my %abreviatures = ("homosapiens" =>"hs",
		    "bostaurus"=> "bt",
		    "daniorerio"=>"dr",
		    "tetraodonnigroviridis"=>"tn",
		    "musmusculus"=>"mmus",
		    "fugurubripes"=>"fr",
		    "canisfamiliaris"=>"cf",
		    "rattusnorvegicus"=>"rn",
		    "monodelphisdomestica"=> "md",
		    "macacamulatta"=>"mmul",
		    "xenopustropicalis_seq1"=>"xt",
		    "xenopustropicalis_seq2"=>"xt",
		    "pantroglodytes"=>"pt",
		    "gallusgallus_seq1"=>"gg",
		    "gallusgallus_seq2"=>"gg");

#Aquest hash lutilitzm perque ens interessa el codi de la seq, no el nom de l'especie, pel format gff.Com que les seq que utilitzem per fer nar el programa estant guardades amb el nom de lespecie, utilitzem el nom del fitxer per a recuperar al hash el codi de la seq.  

my $homo = ''; #Aquesta variable la utilitzem per guardar-hi la sequencia de lhomosapiens que necessitem pel format gff. 

my $gffFile = "TRPV4.gff"; #Aquests es el nom del fitxer de sortida del programa
@fitxers = ("homosapiens","bostaurus","daniorerio","tetraodonnigroviridis","musmusculus","fugurubripes","canisfamiliaris","rattusnorvegicus","monodelphisdomestica","macacamulatta","xenopustropicalis_seq1","xenopustropicalis_seq2","pantroglodytes","gallusgallus_seq1","gallusgallus_seq2");

while ($i<scalar@fitxers){ 

#Recorrem el vector que conte els noms per poder correr el programa de laliniament per a cada parella de seq.

    $ki = $fitxers[$i];
    $fileOut = "hs_".$ki.".smm";

    $err = system("sharmot -A -l 12 $fitxers[0].fst $fitxers[$i].fst > $fileOut");           #Executem el programa.

    #$err = system("/home/domenec/SMM/bin/sharmot -A -l 12 $fitxers[0].fst $fitx    ers[$i].fst > $fileOut");


    open (ALINEAMENT,"<$fileOut");

    while (<ALINEAMENT>){ 

    #Anem llegint el fitxer xde sortida del programa de Castillo-Davis, per anar    transformant al ionformacio en el fprmat gff. 

    chomp;

         if($_ =~ /^Score:\s+[0-9]+\s+;\s+Seq1\s+\[([0-9]+)..([0-9]+)\]\s+;\s+Seq2\s+\[([0-9]+)..([0-9]+)\]\s+;\s+Alignment_length:\s+([0-9]+)\s+;\s+Matches: [0-9]+(.*)/){

	     #Amb aquets experssio regular aconseguim seleccionar les linies de              sortida de Castillo-Davis que teneen la informacio que necessitem. 
	     $inici1 = $1; #Enregistra linici del fragment a la seq1.
	     $final1 = $2; #Enregistra el final del fragment a la seq1.
	     $inici2 = $3; #Enregistra linici del fragment a la seq2.
	     $final2 = $4; #Enregistra final del fragment a la seq2.
	     $length = $5; #Enregistra la llargada del fragment.
	     
	     $info[$j] = "ENSG00000111199\tEns_$abreviatures{$ki}\tEns_$abreviatures{$ki}\t$1\t$2\t1\t.\t.\t$especies{$ki}\t$3\t$4\t$5";
	     $j = $j + 1;

             #Aquest es el format gff.
	 }
    }

    close (ALINEAMENT);

    $i = $i + 1;
}

open(OUT,">$gffFile");
$i=0;

open (HOMOS,"<homosapiens.fst");

    while (<HOMOS>) {
	chomp;
	if ($_=~ /^[ACTGactg]+/){
	    $homo = $homo."##$_\n";
	}
    }	

close (HOMOS);

    print OUT"##gff-version 2\n";
    print OUT "##SharMot .02\n";
    print OUT"##date Fri March 10 14:48:20 2006\n";
    print OUT"##DNA ENSG00000111199\n";
    print OUT "$homo";

while($i<scalar@info) {
    
    print OUT "$info[$i]\n"; #no imprimim tot el vector de cop pq ens surtia un                              espai a dalt de tot que no ens interessava.
    
    $i++;
}

close OUT; 
