#!/usr/bin/perl -w

# usage : perl sm_mothur_align_2.pl <output TXT file> <BAM file 1> <BAM file 2> 
# 02/08/2013 - Wrapper dans le cadre du projet 16S (pour Maria B.)
# Copyright (C) 2013 INRA
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
# 
# You should have received a copy of the GNU General Public License
# along with this program.  If not, see <http://www.gnu.org/licenses/>.
#

use strict;
use File::Basename;


#les inputs names et groups se transforment en un seul input count table de l'étape précédente
#ajout de 4 options :
#- séquence du primer forward ciblant la région 16 S d'intérêt
#- séquence du primer reverse ciblant la région 16 S d'intérêt
#- fichier des taxonomies correspondant au fichier d'alignements de référence (on utilisait ce fichier en étape 3 seulement précédemment)
#- min_len nombre minimum de bases alignées (je l'avais mis en dure dans le code à 200)

#/save/sigenae/bin/Galaxy/2_align_mothur1.0.sh INPUT_FASTA INPUT_COUNT OUT_DIR PRIMER_FWD PRIMER_RV REF_FASTA REF_TAX MIN_LEN
#INPUT_FASTA et INPUt_COUNT sont les sorties du module 1


my $input_fasta                   = $ARGV[0];
my $input_count_table             = $ARGV[1];
my $input_ref                     = $ARGV[2];
my $PRIMER_FWD                   = $ARGV[3];#- séquence du primer forward ciblant la région 16 S d'intérêt
my $PRIMER_RV                     = $ARGV[4];#- séquence du primer reverse ciblant la région 16 S d'intérêt
my $REF_TAX                       = $ARGV[5];#- fichier des taxonomies correspondant au fichier d'alignements de référence (on utilisait ce fichier en étape 3 seulement précédemment)
my $MIN_LEN                       = $ARGV[6];#- min_len nombre minimum de bases alignées (je l'avais mis en dure dans le code à 200)
my $output_html                   = $ARGV[7];
my $output_all_final_fasta        = $ARGV[8];
my $output_final_aln_count_table  = $ARGV[9]; #final.aln.count_table

my $MOTHUR2 = '/home/sigenae/bin/Galaxy/2_align_mothur1.0.sh';
my $cmd = '';
my $cmd1 = '';
my $cmd2 = '';


my $path= dirname($input_fasta);
my ($nb) = ($output_html=~/galaxy_dataset_(\d+)\.\S+$/);
#Repertoire de sortie cree par le script, verif des droits d'ecriture sur ce repertoire de sortie
`mkdir $path/$nb/; chmod 777 $path/$nb/`;
my $dirresults= $path."/".$nb;
print STDOUT "Votre repertoire de travail : $dirresults \n";


#Modification de l extension des inputs
$cmd1 = "ln -s $input_fasta $dirresults/all.trim.unique.fasta; ln -s $input_count_table $dirresults/all.trim.unique.count_table; ln -s $input_ref $dirresults/ref.fasta; ln -s $REF_TAX $dirresults/ref.tax;";
system $cmd1;
print STDOUT "Step 1 - Recuperation des fichiers d entree : \n\n $cmd1 \n\n ";

#mkdir /usr/local/bioinfo/src/galaxy/galaxy-dist/tools/sm_mothur/MOTHUR2; chmod 777 /usr/local/bioinfo/src/galaxy/galaxy-dist/tools/sm_mothur/MOTHUR2; cd /usr/local/bioinfo/src/galaxy/galaxy-dist/tools/sm_mothur/MOTHUR2; /home/sigenae/bin/Galaxy/r454_diversity_Galaxy/2_align_mothur1.0.sh /usr/local/bioinfo/src/galaxy/galaxy-dist/tools/sm_mothur/tests2/TATA/TATA/all.trim.unique.fasta /usr/local/bioinfo/src/galaxy/galaxy-dist/tools/sm_mothur/tests2/TATA/TATA/all.trim.names /usr/local/bioinfo/src/galaxy/galaxy-dist/tools/sm_mothur/tests2/TATA/TATA/all.groups /usr/local/bioinfo/src/galaxy/galaxy-dist/tools/sm_mothur/MOTHUR2 /usr/local/bioinfo/src/galaxy/galaxy-dist/tools/sm_mothur/silva.bacteria/silva.bacteria.fasta 
#2_align_mothur1.0.sh path_INPUT_FASTA path_INPUT_NAMES path_INPUT_GROUPS path_to_OUTDIR path_DB_REF MIN_LEN
#TESTS commande : perl sm_mothur_align_2.pl /usr/local/bioinfo/src/galaxy/galaxy-dist/tools/sm_mothur/tests2/TATA/TATA/all.trim.unique.fasta /usr/local/bioinfo/src/galaxy/galaxy-dist/tools/sm_mothur/tests2/TATA/TATA/all.trim.names /usr/local/bioinfo/src/galaxy/galaxy-dist/tools/sm_mothur/tests2/TATA/TATA/all.groups /usr/local/bioinfo/src/galaxy/galaxy-dist/tools/sm_mothur/silva.bacteria/silva.bacteria.fasta out_galaxy_dataset_1234.dathtml outfasta outnames outgroups
#attention, rechercher les resultats dans /usr/local/bioinfo/src/galaxy/galaxy-dist/tools/sm_mothur/tests2/TATA/TATA/1234
#perl sm_mothur_align_2.pl /usr/local/bioinfo/src/galaxy/galaxy-dist/tools/sm_mothur/tests2/TATA/TATA/all.trim.unique.fasta /usr/local/bioinfo/src/galaxy/galaxy-dist/tools/sm_mothur/tests2/TATA/TATA/all.trim.names /usr/local/bioinfo/src/galaxy/galaxy-dist/tools/sm_mothur/tests2/TATA/TATA/all.groups /usr/local/bioinfo/src/galaxy/galaxy-dist/tools/sm_mothur/silva.bacteria/silva.bacteria.fasta out_galaxy_dataset_123456789.dathtml outfasta outnames outgroups


#$cmd = "(cd $dirresults; $MOTHUR2 ${input_fasta}.fasta $input_names $input_groups $dirresults ${input_ref}.fasta) >& ./mothur2.log 2>&1";
$cmd = "(cd $dirresults; $MOTHUR2 $dirresults/all.trim.unique.fasta $dirresults/all.trim.unique.count_table $dirresults $PRIMER_FWD $PRIMER_RV $dirresults/ref.fasta $dirresults/ref.tax $MIN_LEN) >& ./mothur2.log 2>&1";
#pour les tests sur la vm car maria fait des liens symboliques et il ne faut pas changer les noms
#cette ligne de ccde est OK mais les fichiers galaxy etant renommes et extension aussi, ca ne marchera pas via l interface
#$cmd = "(cd $dirresults; $MOTHUR2 $input_fasta $input_names $input_groups $dirresults $input_ref) >& ./mothur2.log 2>&1";
system $cmd;

#Info pour les biologistes
print STDOUT "Step 2 - Alignement Mothur : \n\n $cmd \n\n ";

#Suppression des fichiers inutiles
#$cmd2 = "rm $dirresults/*mothur*; rm $dirresults/all.trim.*; rm $dirresults/all.filter; rm $dirresults/all.good.groups*; rm $dirresults/*.pdf; rm $dirresults/*ref*;rm $dirresults/all.groups ; ";
#system $cmd2;


#Recuperation des fichiers par Galaxy
if (! -e "$dirresults/final.aln.fasta"){print STDERR "all.final.fasta file not found. \n";}else{`cp -a $dirresults/final.aln.fasta $output_all_final_fasta`;}
if (! -e "$dirresults/final.aln.count_table"){print STDERR "final.aln.count_table file not found. \n";}else{`cp -a $dirresults/final.aln.count_table $output_final_aln_count_table`;}
if (! -e "$dirresults/bilan.html"){print STDERR "bilan html file not found. \n";}else{`cp -a $dirresults/bilan.html $output_html`;}
