#!/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 $lib                               = $ARGV[3];

#Galaxy outputs files
my $output_C_AV_fasta                 = $ARGV[4];
my $output_projet_lib_C_VM_fasta      = $ARGV[5];
my $output_projet_lib_C_VN_fasta      = $ARGV[6];
my $output_projet_lib_contiglist_fasta= $ARGV[7];


#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 ($nb) = ($output_projet_lib_contiglist_fasta=~/galaxy_dataset_(\d+)\.\S+$/);

#Creation d un repertoire de travail
my $path= "/work/galaxy/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 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/database/files/workspace/nb soit /work/galaxy/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/database/files/workspace/nb
`cd $dirresults; mkdir path1/; mkdir path1/path2/; mkdir path1/path2/path3/; mkdir path1/path2/path3/path4/; mkdir path1/path2/path3/path4/path5/; mkdir path1/path2/path3/path4/path5/path6/; mkdir path1/path2/path3/path4/path5/path6/lib/; mkdir path1/path2/path3/path4/path5/path6/lib/projet/; chmod -R 770 path1/path2/path3/path4/path5/path6/lib/projet/`;


#Copier les fichiers entrants et l'ensemble des scripts du repertoire scripts/* dans le repertoire de travail
`cp -a $input_clean_fasta $dirresults/path1/path2/path3/path4/path5/path6/lib/projet/projet."lib".decontaminated.clean.fasta.cap.contigs; cp -a $input_ref_fasta $dirresults/path1/path2/path3/path4/path5/path6/lib/projet/ref.fasta; cp -a $input_contig_res $dirresults/path1/path2/path3/path4/path5/path6/lib/projet/contig.res; cp /usr/local/bioinfo/src/galaxy/galaxy-dist/tools/sm_clones/scripts/* $dirresults/.;`; 

#Stand by avant de passer a l'étape suivante

#Lancer la premiere etape de traitement
$cmd = "(cd $dirresults; cross_match path1/path2/path3/path4/path5/path6/lib/projet/projet.lib.decontaminated.clean.fasta.cap.contigs path1/path2/path3/path4/path5/path6/lib/projet/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 :
#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)


#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 path1/path2/path3/path4/path5/path6/lib/projet/contig.res path1/path2/path3/path4/path5/path6/lib/projet/projet.lib.decontaminated.clean.fasta.cap.contigs) >& ./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 :
#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

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

#lancer la seconde etape de traitement
$cmd3 = "(cd $dirresults; perl CreateVMAndVNFiles-dec2013.pl path1/path2/path3/path4/path5/path6/lib/projet/contig.res path1/path2/path3/path4/path5/path6/lib/projet/projet.lib.decontaminated.clean.fasta.cap.contigs.screen) >& ./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**********


#Recuperation des output Galaxy
#my $CVM = "$dirresults/path1/path2/path3/path4/path5/path6/$lib/projet/projet."$lib".C"."$nbContig"."VM.fasta";
my $CVM = glob("$dirresults/path1/path2/path3/path4/path5/path6/lib/projet/projet.lib.C*VM.fasta");  
if (! -e $CVM ){print STDERR "Echec lors de la generation du fichier de sortie $CVM \n";} else {$cmd5 = "(cp -a $CVM $output_projet_lib_C_VM_fasta) >& ./cpclone3.log 2>&1"; system $cmd5;}

#my $CVN = "$dirresults/path1/path2/path3/path4/path5/path6/$lib/projet/projet."$lib".C"."$nbContig"."VN.fasta";
my $CVN = glob("$dirresults/path1/path2/path3/path4/path5/path6/lib/projet/projet.lib.C*VN.fasta");  
if (! -e $CVN ){print STDERR "Echec lors de la generation du fichier de sortie $CVN \n";} else {$cmd6 = "(cp -a $CVN $output_projet_lib_C_VN_fasta) >& ./cpclone4.log 2>&1"; system $cmd6;}

#my $ContigList ="$dirresults/path1/path2/path3/path4/path5/path6/$lib/projet/projet."$lib".contiglist.fasta";
my $ContigList ="$dirresults/path1/path2/path3/path4/path5/path6/lib/projet/projet.lib.contiglist.fasta";
if (! -e $ContigList ){print STDERR "Echec lors de la generation du fichier de sortie $ContigList \n";} else {$cmd7 = "(cp -a $ContigList $output_projet_lib_contiglist_fasta) >& ./cpclone5.log 2>&1"; system $cmd7;}

my $CAV = glob("$dirresults/path1/path2/path3/path4/path5/path6/lib/projet/projet.lib.C*AV.fasta"); 
if (! -e $CAV ){print STDERR "Echec lors de la generation du fichier de sortie $CAV \n";} else {$cmd4 = "(cp -a $CAV $output_C_AV_fasta) >& ./cpclone2.log 2>&1"; system $cmd4;}

