#!/usr/bin/perl -w

# usage : sm_clones_meta1.pl
# sarah maman - 10 dec 2013 - Mis en place pour le traitement des clones metagenomiques

use strict;
use warnings;
use File::Basename;
use POSIX qw( :sys_wait_h );
use Time::HiRes;

#Inputs files
my $input_clean_fasta                 = $ARGV[0];
my $input_ref_fasta                   = $ARGV[1];
my $input_contig_res                  = $ARGV[2];

#Parametres
my $clonename                         = $ARGV[3];

#Galaxy outputs files
my $output_report                     = $ARGV[4];
#my $output_contiglist_fasta           = $ARGV[5];

#my $toto ='';
#my $version = "python --version >& $toto";
#system $version;
#print STDOUT "python version : $version et $toto \n";
#my $version=`python --version`;
#print STDOUT $version;


print STDOUT "Voici les traitements réalisés par Galaxy : \n\n Votre clonename est : $clonename \n";
#remplacer les minuscules de clonename par des majuscules
#$clonename =~ s/./\U$1/gi;
#$clonename =~ s/\s/_/g;
$clonename =~ s/\s//g;
#$clonename =~ s/[[:punct:]]/-/g;
$clonename =~ s/[[:punct:]]//g;
#$clonename =~ s/àáâãäåçèéêëìíîïðòóôõöùúûüýÿ/X/g;
print STDOUT "Votre clonename mis en forme par Galaxy : $clonename \n";

#my $nbContigbasic =`wc -l <$input_contig_res`;
#my $nbContig = $nbContigbasic -1;
#print STDOUT "Number of contigs : $nbContig\n";

#test du wrapper galaxy (attention, changer le numero de la galaxy_dataset
#perl sm_clones_meta1_BIS.pl FilesTests/module1_inputsFiles/Formation.RL1.decontaminated.clean.fasta.cap.contigs FilesTests/module1_inputsFiles/pCC1FOS.fasta FilesTests/module1_inputsFiles/Formation.RL1.ContigLengthG1000ProfG8.res lib out4 out5 out6 galaxy_dataset_1589722132228444.dat

my $cmd; my $cmd2; my $cmd3; 
#my $cmd4 = ''; my $cmd5 = ''; my $cmd6 = ''; my $cmd7 = '';my $cmd8 = '';my $cmd9 = '';my $cmd10 = '';
#my ($nb) = ($output_contiglist_fasta=~/galaxy_dataset_(\d+)\.\S+$/);
my ($nb) = ($output_report=~/galaxy_dataset_(\d+)\.\S+$/);

#Creation d un repertoire de travail
#my $path= "/work/galaxy-dev/database/files/workspace";
my $path= "/galaxydata/database/files/workspace";
if (! -e $path ){`mkdir $path;`; print STDOUT "Creation d'un workspace.\n";} 

#Verification des droits d'ecriture sur ce repertoire de sortie
`cd $path; mkdir $nb/; chmod -R 777 $nb/`;
my $dirresults= $path."/".$nb;
print STDOUT "Votre repertoire de travail : $dirresults \n\n";

#Il est definit dans les scripts que les fichiers d'entree et de sortie sont dans une arborescence a 8 niveaux (path1/path2/path3/path4/path5/path6/lib/projet/) 
#qui debute au niveau du repertoire de travail : /work/galaxy-dev/database/files/workspace/nb soit /work/galaxy-dev/database/files/workspace/nb/path1/path2/path3/path4/path5/path6/lib/projet/ 
#pour les fichiers d'entree et de sortie
#et les scripts sont copies et lances dans /work/galaxy-dev/database/files/workspace/nb


#Copier les fichiers entrants et l'ensemble des scripts du repertoire scripts/* dans le repertoire de travail
`cp -a $input_clean_fasta $dirresults/decontaminated.clean.fasta.cap.contigs; cp -a $input_ref_fasta $dirresults/ref.fasta; cp -a $input_contig_res $dirresults/contig.res; cp /usr/local/bioinfo/src/galaxy-dev/galaxy-dist/tools/sm_clones/scripts/*.pl $dirresults/.;cp /usr/local/bioinfo/src/galaxy-dev/galaxy-dist/tools/sm_clones/scripts/*.py $dirresults/.;`; 

#Lancer la premiere etape de traitement
$cmd = "(cd $dirresults; cross_match decontaminated.clean.fasta.cap.contigs ref.fasta -minmatch 9 -minscore 30 -screen > contigs.fasta) >& ./clone1.log 2>&1;";
system $cmd;

#Info pour les biologistes
print STDOUT "First step : \n\n $cmd \n\n ";

#En sortie POUR RL1:
#1- contigs.fasta
#2- clean.fasta.screen (Pyrocleaner/RL1/Formation.RL1.decontaminated.clean.fasta.cap.contigs.screen)
#3- clean.fasta.log   ( Pyrocleaner/RL1/Formation.RL1.decontaminated.clean.fasta.cap.contigs.log)

#POUR RL2
#-rw-r--r-- 1 galaxy wbioinfo  49K 10 janv. 14:24 decontaminated.clean.fasta.cap.contigs
#-rw-r--r-- 1 galaxy wbioinfo  110 10 janv. 14:42 cross_match  LIGNE DE COMMANDE
#-rw-r--r-- 1 galaxy wbioinfo  49K 10 janv. 14:44 decontaminated.clean.fasta.cap.contigs.screen
#-rw-r--r-- 1 galaxy wbioinfo 3,0K 10 janv. 14:44 contigs.fasta
#-rw-r--r-- 1 galaxy wbioinfo   74 10 janv. 14:44 decontaminated.clean.fasta.cap.contigs.log


#Stand by avant de passer a l'étape suivante
#sleep(180);
if ( WIFEXITED($?) ) {    # vrai pour une fin normale
        my $status = WEXITSTATUS($?);    # état de sortie
	#print STDOUT "etat du process : $status \n";

#****************************************
#Etape 2
#****************************************

#lancer la seconde etape de traitement
$cmd2 = "(cd $dirresults; perl CreateAVFiles-dec2013.pl contig.res decontaminated.clean.fasta.cap.contigs $dirresults) >& ./clone2.log 2>&1;";
system $cmd2;

#Info pour les biologistes
print STDOUT "Second step : \n\n $cmd2 \n\n ";

#EN ENTREE :
#arg0 : Pyrocleaner/RL1/Formation.RL1.ContigLengthG1000ProfG8.res (1) 	-> contig.res
#arg1 : Pyrocleaner/RL1/Formation.RL1.decontaminated.clean.fasta.cap.contigs 	  -> clean.fasta
#arg 2 : Nombre de contig -> 7 (par exemple !)

#EN SORTIE POUR RL1 :
#Formation.RL1.C14AV.fasta (2) **************OUTPUT GALAXY********** : C7AV.fasta (C - nb contigs- AV.fasta)
#Formation.RL1.decontaminated.clean.fasta.cap.contigs.oneline  -> clean.fasta.oneline



#POUR RL2
#-rw-r--r-- 1 galaxy wbioinfo  48K 10 janv. 14:45 decontaminated.clean.fasta.cap.contigs.oneline
#-rw-r--r-- 1 galaxy wbioinfo  10K 10 janv. 14:45 C6AV.fasta
#-rw-r--r-- 1 galaxy wbioinfo 3,1K 10 janv. 14:45 C7AV.fasta
#-rw-r--r-- 1 galaxy wbioinfo  32K 10 janv. 14:45 C8AV.fasta


#****************************************
#Etape 3
#****************************************

#lancer la seconde etape de traitement
$cmd3 = "(cd $dirresults; perl CreateVMAndVNFiles-dec2013.pl contig.res decontaminated.clean.fasta.cap.contigs.screen $clonename $dirresults) >& ./clone3.log 2>&1;";
system $cmd3;

#Info pour les biologistes
print STDOUT "Third step : \n\n $cmd3 \n\n ";

#SUITE POSIX
}


#EN ENTREE :
#Pyrocleaner/RL1/Formation.RL1.ContigLengthG1000ProfG8.res (1) 	 -> contig.res
#Pyrocleaner/RL1/Formation.RL1.decontaminated.clean.fasta.cap.contigs.screen 	************** Sortie du 1er script ********** -> clean.fasta.screen
#EN SORTIE :
#Formation.RL1.decontaminated.clean.fasta.cap.contigs.screen.oneline
#Formation.RL1.C14VM.fasta **************OUTPUT GALAXY**********
#Formation.RL1.C14VM.fasta.temp
#Formation.RL1.C14VM.fasta.temp.modified
#Formation.RL1.C14VN.nettoyageVecteur.log
#Formation.RL1.C14VN.fasta (2) **************OUTPUT GALAXY**********
#Formation.RL1.contiglist.fasta **************OUTPUT GALAXY**********

#On retrouve les fichiers dans le repertoire de travail :
#-rw-r--r-- 1 smaman BIOINFO  56K 10 déc.  15:11 clean.fasta.screen.oneline
#-rw-r--r-- 1 smaman BIOINFO  437 10 déc.  15:11 projet.lib.C7VM.fasta **************OUTPUT GALAXY**********
#drwxr-xr-x 2 smaman BIOINFO 1,1K 10 déc.  15:11 .
#-rw-r--r-- 1 smaman BIOINFO  438 10 déc.  15:11 projet.lib.C7VN.fasta **************OUTPUT GALAXY**********
#-rw-r--r-- 1 smaman BIOINFO   48 10 déc.  15:11 projet.lib.contiglist.fasta **************OUTPUT GALAXY**********


#POUR RL1:
#-rw-r--r-- 1 galaxy wbioinfo  50K 10 janv. 10:04 clonename.C14VM.fasta
#-rw-r--r-- 1 galaxy wbioinfo  42K 10 janv. 10:04 clonename.C14VM.fasta.temp
#-rw-r--r-- 1 galaxy wbioinfo  42K 10 janv. 10:04 clonename.C14VM.fasta.temp.modified
#-rw-r--r-- 1 galaxy wbioinfo  899 10 janv. 10:04 clonename.C14VN.nettoyageVecteur.log
#drwxr-xr-x 2 galaxy wbioinfo  750 10 janv. 10:04 .
#-rw-r--r-- 1 galaxy wbioinfo  42K 10 janv. 10:04 clonename.C14VN.fasta
#-rw-r--r-- 1 galaxy wbioinfo   85 10 janv. 10:04 clonename.contiglist.fasta


#POUR RL2
#-rw-r--r-- 1 galaxy wbioinfo  48K 10 janv. 14:50 decontaminated.clean.fasta.cap.contigs.screen.oneline
#-rw-r--r-- 1 galaxy wbioinfo 9,9K 10 janv. 14:50 clonenameRL2.C6VM.fasta
#-rw-r--r-- 1 galaxy wbioinfo 9,9K 10 janv. 14:50 clonenameRL2.C6VN.fasta
#-rw-r--r-- 1 galaxy wbioinfo 3,1K 10 janv. 14:50 clonenameRL2.C7VM.fasta
#-rw-r--r-- 1 galaxy wbioinfo 3,1K 10 janv. 14:50 clonenameRL2.C7VN.fasta
#-rw-r--r-- 1 galaxy wbioinfo  31K 10 janv. 14:50 clonenameRL2.C8VM.fasta
#-rw-r--r-- 1 galaxy wbioinfo  23K 10 janv. 14:50 clonenameRL2.C8VM.fasta.temp
#-rw-r--r-- 1 galaxy wbioinfo  24K 10 janv. 14:50 clonenameRL2.C8VM.fasta.temp.modified
#-rw-r--r-- 1 galaxy wbioinfo  499 10 janv. 14:50 clonenameRL2.C8VN.nettoyageVecteur.log
#-rw-r--r-- 1 galaxy wbioinfo 6,1K 10 janv. 14:50 clonenameRL2.C8aVN.fasta
#drwxr-xr-x 2 galaxy wbioinfo 1023 10 janv. 14:50 .
#-rw-r--r-- 1 galaxy wbioinfo  17K 10 janv. 14:50 clonenameRL2.C8bVN.fasta
#-rw-r--r-- 1 galaxy wbioinfo  201 10 janv. 14:50 clonenameRL2.contiglist.fasta



#Ouverture des images dans un fichier html (ouput2)
#creation d'un fichier html
open (HTML, ">", "$dirresults/results.html") or die "Cannot create results.html";

print HTML "<center><strong>LISTE ET ACCES AUX FICHIERS SORTANTS</strong></center><br><br>Voici l'ensemble des fichiers résultants de la première étape de nettoyage avec leur chemin d'accès sur Galaxy en vu traitements ulterieurs :";
print HTML ("<br><br>");

#Pour pouvoir ouvrir les fichiers dans la fenetre de visualisation de Galaxy, il faut paramétrer Apache de la maniere suivante :
# vi /etc/httpd/conf.d/galaxy.conf 
#pour ajouter cette ligne : RewriteRule ^/galaxy-dev/download/(.*) /work/galaxy-dev/database/files/$1 [L]
#puis reload de httpd :  /etc/init.d/httpd reload


#Creation d un repertoire de travail
#my $path2= "/work/galaxy-dev/database/files/$nb/";
my $path2= "/galaxydata/database/files/workspace/$nb/";
`mkdir $path2; cd /galaxydata/database/files/workspace/; chmod -R 777 $nb;`;

my @CAV = glob("$dirresults/C*AV.fasta");
my $i ='';
print HTML ("<br>");
print HTML ("<strong>Liste des chemins d'acces aux fichiers AV fasta :</strong>");
foreach $i (@CAV)
{
`cp $i $path2/.`;
my $url="$i";
my $accessCAV ="$i";
$accessCAV=~s/^\/work\/galaxy\/database\/files/\/galaxy\/download/;
print HTML ("<TABLE BORDER><TR><TH>Chemin</TH><TH>Lien</TH></TR><TR><TD>$url</TD><TD><a href=\"$accessCAV\"> Access au fichier CAV</a></TD></TR></TABLE>");
}

my @CVM = glob("$dirresults/*C*VM.fasta");
my $j ='';
print HTML ("<br><br>");
print HTML ("<strong>Liste des chemins d'acces aux fichiers VM fasta :</strong>");
foreach $j (@CVM)
{
my $url="$j";
my $accessCVM ="$j";
$accessCVM=~s/^\/work\/galaxy\/database\/files/\/galaxy\/download/;
print HTML ("<TABLE BORDER><TR><TH>Chemin</TH><TH>Lien</TH></TR><TR><TD>$url</TD><TD><a href=\"$accessCVM\"> Access au fichier CVM</a></TD></TR></TABLE>");
}

my @CVN = glob("$dirresults/*C*VN.fasta");
my $k ='';
print HTML ("<br><br>");
print HTML ("<strong>Liste des chemins d'acces aux fichiers VN fasta :</strong>");
foreach $k (@CVN)
{
my $url="$k";
my $accessCVN ="$k";
$accessCVN=~s/^\/work\/galaxy\/database\/files/\/galaxy\/download/;
print HTML ("<TABLE BORDER><TR><TH>Chemin</TH><TH>Lien</TH></TR><TR><TD>$url</TD><TD><a href=\"$accessCVN\"> Access au fichier CVN</a></TD></TR></TABLE>");
}


##my $cmd10='';
#my $file="$dirresults/clonename.contiglist.fasta";
#my $ContigList ="$dirresults/$clonename".".contiglist.fasta";
#if (! -e $file ){print STDOUT "Contig list : $ContigList \n";}else {`mv $file $ContigList`;}
#if (! -e $ContigList ){print STDERR "Echec lors de la generation du fichier de sortie $ContigList \n";} else {
##$cmd10 = "(cp -a $ContigList $output_contiglist_fasta) >& ./cpclone5.log 2>&1"; system $cmd10
#print HTML ("<br><br><a href=\"$ContigList\"> Access au fichier report</a>");
#}


my $file="$dirresults/clonename.contiglist.fasta";
my $ContigList ="$dirresults/$clonename".".contiglist.fasta";
if (! -e $file ){print STDOUT "Contig list : $ContigList \n";}else {`mv $file $ContigList`;}
if (! -e $ContigList ){print STDERR "Echec lors de la generation du fichier de sortie $ContigList \n";} else {
my $file = "$ContigList";
$file =~s/^\/work\/galaxy\/database\/files/\/galaxy\/download/;
print HTML ("<br><br><a href=\"$file\"> Access au fichier report</a>");
}


close( HTML );

#Recuperation des outputs dans Galaxy
my $cmdhtml ='';
my $out= "$dirresults/results.html";
if (! -e $out){print STDERR "Pas de fichier html produit \n";}
else {$cmdhtml = "(mv $out $output_report) >& ./cp_html.log 2>&1";
system $cmdhtml;}




