#!/bin/bash
set -x
#creation des répertoire de travail
#
# repertoire de travail Date 
dir=$(date +%F)  
docpathbase="latex"
# Si plusieur Job on se premuni des écrasements par erreur en 
# créant un répertoire par Job 
# $1 le nom du job sert de base  ...
# $date ... discrimination par horodate 
# $RANDOM ... au cas ou plusieurs job seraient lancé avec la meme basename
basename=${1%%.txt}
#nombre de bootstrap 
bootstrap=$2
#if [ $bootstrapt="" ]; then
#   bootstrap="1"
#fi
subdir=$basename.$(date +%H-%M-%S).$RANDOM
# on crée le répertoire 
mkdir -p $dir/$subdir/$docpathbase
locpath=$PWD
echo "=======================================================================<br />"
echo "$locpath <br />"
echo "=======================================================================<br />"
#basepath="/home/WIP"
###############################################################################
#  Fonction Pour la creation de fichier LaTex
#  En Entrée 
#  locpath=$1         := chemin local vers le répertoire
#  dir=$2             := répertoire de travail
#  subdir=$3          := sous répertoire permet de lancer plusieur job différent sur un même fichier d'entré
#  docpathbase=$4     := répertoire d'écriture pour les fichiers latex de résultat
#  basename=$5        := nom de base utilisé pour nommer les fichier résultats 
###############################################################################
function createdoc ()
{
  locpath=$1
  dir=$2
  subdir=$3
  docpathbase=$4
  basename=$5
# 
echo "                   " 1>./$docpathbase/$basename.tex
echo " \section{Procédure pour $basename} " 1>>./$docpathbase/$basename.tex
echo " \subsection*{emplacement des fichiers  $basename} " 1>>../$docpathbase/$basename.tex
echo "      Les fichiers sont présent dans :  " 1>>./$docpathbase/$basename.tex
echo "  "  1>>./$docpathbase/$basename.tex
echo "  "  1>>./$docpathbase/$basename.tex
echo "      \titlebox{PATH}{ $dir/$subdir } " 1>>./$docpathbase/$basename.tex
echo " \subsection*{Alignement :Muscle} " 1>>./$docpathbase/$basename.tex
echo "   Le job muscle est effectué sans paramètre particulier.  " 1>>./$docpathbase/$basename.tex
echo "  "  1>>./$docpathbase/$basename.tex
echo "  "  1>>./$docpathbase/$basename.tex
echo "   \titlebox{Commande} {/usr/bin/muscle -in $1 -out $basename.fst } " 1>>./$docpathbase/$basename.tex
echo " \subsection*{Nettoyage alignement : Gblocks}  " 1>>./$docpathbase/$basename.tex
echo "  Nous effectuons entre le résultat muscle et le nettoyage une conversion de format pour que " 1>>./$d
echo "  Gblocks \cite{gblocks} puisse exploiter les données.  " 1>>./$docpathbase/$basename.tex
echo "  "  1>>./$docpathbase/$basename.tex
echo "  "  1>>./$docpathbase/$basename.tex
echo "  \titlebox{conversion  readseq}{ readseq $basename.fst   -all -f=nbrf   -output=$basename.nbrf} "  1>
echo "  Puis nous effectuons le nettoyage des séquences "  1>>./$docpathbase/$basename.tex
echo "  "  1>>./$docpathbase/$basename.tex
echo "  "  1>>./$docpathbase/$basename.tex
echo "  \titlebox{nettoyage Gblocks}{/home/bin/Gblocks $basename.nbrf  -e=-gb -d=y}  "  1>>./$docpat
echo " Pour le reste du job nous retransformons la fichier nettoyer pour l'utiliser avec PhyML \cite{phyml} 
echo "  "  1>>./$docpathbase/$basename.tex
echo "  "  1>>./$docpathbase/$basename.tex
echo " \titlebox{ conversion readseq }{  readseq $basename.nbrf-gb  -all -f=phylip -output=$basename.phy-gb 
echo " \subsection*{ Optimisation du Modele : ProtTest}   " 1>>./$docpathbase/$basename.tex
echo "   Nous optimisons  le model pour le calcul de l'arbre en utilisant le programme ProtTest  \cite{prott
echo "  "  1>>./$docpathbase/$basename.tex
echo "  "  1>>./$docpathbase/$basename.tex
echo "   \titlebox{Optimisation modele }{./runProtTest -i $locpath/$dir/$subdir/$basename.phy-gb -o $locpath
echo "\subsection{Phylogénie : phyml}  "  1>>./$docpathbase/$basename.tex
echo "  "  1>>./$docpathbase/$basename.tex
echo "  "  1>>./$docpathbase/$basename.tex
echo " \titlebox{commande}{/usr/bin/phyml $option  -i $basename.phy-gb }"   1>>./$docpathbase/$basename.tex
echo "\section{Résultats pour $basename} " 1>>./$docpathbase/$basename.tex
echo "  \subsection{ Unrooted Tree} " 1>>./$docpathbase/$basename.tex
echo "    \begin{figure}[!htb] "    1>>./$docpathbase/$basename.tex
echo "       \centering "   1>>./$docpathbase/$basename.tex 
echo "           \includegraphics[scale=.7]{$basename-unrooted.eps} " 1>>./$docpathbase/$basename.tex 
echo "           \caption{ $basename } " 1>>./$docpathbase/$basename.tex 
echo "    \end{figure} " 1>>./$docpathbase/$basename.tex 
echo "  \subsection{ Unrooted Tree boostrap } " 1>>./$docpathbase/$basename.tex
echo "    \begin{figure}[!htb] "    1>>./$docpathbase/$basename.tex
echo "       \centering "   1>>./$docpathbase/$basename.tex
echo "           \includegraphics[scale=.7]{$basename-bootstrap_value.eps}" 1>>./$docpathbase/$basename.tex 
echo "           \caption{ $basename avec boostrap } " 1>>./$docpathbase/$basename.tex 
echo "    \end{figure} " 1>>./$docpathbase/$basename.tex 
#
# Another way for creating main.tex 
#
#sed 's/input{EmbRBmfRBacteria}/input{$basename}/' main.tex > main2.tex
#mv main2.tex main.tex
 
echo '\include{preamble} %% all things I need for my document 

  stored in preamble.tex'> ./$docpathbase/ma
echo '
%%  Il me semble que le mieux est de mettre des \cite{} dans les differentes sections 
%% et des \ref{} dans les questions ' >>./$docpathbase/main.tex
echo '\begin{document}'>>./$docpathbase/main.tex
echo '%%\dominitoc'>>./$docpathbase/main.tex
echo '%%\dominilof[c]                   % center title of minilofs'>>./$docpathbase/main.tex
echo '%%\dominilot'>>./$docpathbase/main.tex
echo '%%\doparttoc                      % test of parttoc/partlof stuff'>>./$docpathbase/main.tex
echo '%%\dopartlof                      % added in version #15'>>./$docpathbase/main.tex
echo '%%\dopartlot                      % added in version #15'>>./$docpathbase/main.tex
echo '%rubber: dvips.options -R0'>>./$docpathbase/main.tex
echo '\newpage'>>./$docpathbase/main.tex
echo '\tableofcontents'>>./$docpathbase/main.tex
echo '\part{Jobs}'>>./$docpathbase/main.tex
echo "  \input{$basename}">>./$docpathbase/main.tex
echo '%%symbole paragraphe \S'>>./$docpathbase/main.tex
echo '%% e dans l  o \oe{}'>>./$docpathbase/main.tex
echo '%\printindex'>>./$docpathbase/main.tex
echo '\bibliographystyle{plain}'>>./$docpathbase/main.tex
echo '%\bibliography{biblio}'>>./$docpathbase/main.tex
echo '\end{document}'>>./$docpathbase/main.tex
#
# compilation et document 
cd ./$docpathbase/
cp main.tex ..
#
# Attention pour la création de la table des matiere il faut une double compilation du source TeX
latex main.tex && latex.main.tex  
dvips main.dvi && dvipdf main.dvi
}
# on copie les fichiers - jamais travailler sur l'original !! 
cp $1 $dir/$subdir
echo "=======================================================================<br />";
echo "cp $1 $dir/$subdir <br />"
echo "=======================================================================<br />";
# on se déplace sur les lieux de travail 
cd $dir/$subdir
cp /home/WIP/latex/*.tex ./$docpathbase/
echo "=======================================================================<br />";
echo "PATH : $PWD <br />"
echo "=======================================================================<br />";
#
# transforme sequence txt en alignement  
/usr/bin/muscle -in $1 -out $basename.fst 
echo "=======================================================================<br />";
echo "/usr/bin/muscle -in $1 -out $basename.fst <br />"
echo "=======================================================================<br />";
#
# Transforme  fst to phyl # lu par Gblocks
#
 readseq $basename.fst   -all -f=nbrf   -output=$basename.nbrf   
echo "=======================================================================<br />";
echo " readseq $basename.fst   -all -f=nbrf   -output=$basename.nbrf  <br />"
echo "=======================================================================<br />";
#
# nettoyage des alignements avec Gblocks #  -t type of sequence p(rotein) d(na) c(odons)
#  
/opt/Gblocks $basename.nbrf  -e=-gb -d=y
echo "=======================================================================<br />";
echo " /home/bin/Gblocks $basename.nbrf  -e=-gb -d=y  <br />"
echo "=======================================================================<br />";
#
readseq $basename.nbrf-gb  -all -f=phylip -output=$basename.phy-gb
echo "=======================================================================<br />";
echo " readseq  $basename.nbrf-gb  -all -f=phylip -output=$basename.phy-gb <br />"
echo "=======================================================================<br />";
# Ici normalement utilisation de Prottest 
# pour trouver le meilleur  set pour la phylogenie 
# 
# petit hack il faut retourner dans le repertoire ProtTest .. sinon ne fonctionne pas 
#cd /home/bin/ProtTest2.4/
cd /opt/ProtTest2.4/
echo "=======================================================================<br />";
echo "PATH : $PWD <br />"
echo "=======================================================================<br />";
# +I:invariable sites, +G: rate heterogeneity among sites, +F: observed amino acid ..
# peut etre des info ici 
# 
http://www.biomedcentral.com/1471-2148/11/34
# 
http://gemini.oscs.montana.edu/~mlavin/500/cour_MB.txt
# 
http://www.atgc-montpellier.fr/phyml/
 #  ./runProtTest -all-distribution -all-matrices -all -verbose -i ~WIP/21092011/parallele/${1%%.txt
   #./runProtTest -all-distribution -all-matrices -all -verbose -S:1 -i $locpath/$dir/$subdir/${1%%.txt}.phy
./runProtTest -i $locpath/$dir/$subdir/$basename.phy-gb -o  $locpath/$dir/$subdir/$basename.phy-gb.res   -al
echo "=======================================================================<br />";
echo "./runProtTest -i $locpath/$dir/$subdir/$basename.phy-gb -o  $locpath/$dir/$subdir/$basename.phy-gb.res
echo "=======================================================================<br />";
#
#  recupération de la meilleur méthode pour la construction 
#  phylogénique 
# 
 
#best=$(grep "Best model" /home/WIP/21092011/parallele/${1%%.txt}.phy-gb.res|awk -F: '{print $2}')
best=$(grep "Best model" $locpath/$dir/$subdir/$basename.phy-gb.res|awk -F: '{print $2}')
echo $best
model=$(grep "Best model"  $locpath/$dir/$subdir/$basename.phy-gb.res|awk -F: '{print $2}'|awk -F+ '{print $
addon1=$(grep "Best model" $locpath/$dir/$subdir/$basename.phy-gb.res|awk -F: '{print $2}'|awk -F+ '{print $
addon2=$(grep "Best model" $locpath/$dir/$subdir/$basename.phy-gb.res|awk -F: '{print $2}'|awk -F+ '{print $
addon3=$(grep "Best model" $locpath/$dir/$subdir/$basename.phy-gb.res|awk -F: '{print $2}'|awk -F+ '{print $
datatype=$(grep ". Data type :" $locpath/$dir/$subdir/$basename.phy-gb.res|awk -F: '{print $2}')
option1="";
option2="";
option3="";
if [ $addon3="F" ]||[ $addon3="G" ]||[ $addon3="I" ] ; then     option3=" +$addon3 "; fi
if [ $addon1="F" ]||[ $addon1="G" ]||[ $addon1="I" ] ; then     option1=" +$addon1 "; fi
if [ $addon2="F" ]||[ $addon2="G" ]||[ $addon2="I" ] ; then     option2=" +$addon2 "; fi
# reconstruction de la ligne de commande 
# on retourne dans le répertoire de travail 
cd $locpath/$dir/$subdir/
option4=" nt";
if [ $datatype="dna" ] ; then option4=" aa"; fi
# option=" -m$model $option1 $option2 $option3 -b1000 0  s 1 bootstrap_number JC69 1 0 1 1 BIONJ n n "
#  -d nt -m CPREV  -b 10 -v e -c 4 -a e -s BEST +G +F +I -i   bchp.phy-gb
option=" -d $option4  -m $model $option1 $option2 $option3  -b $bootstrap "
#  
#  -d aa : datatype nt = nucléotide , aa amino acids
#  -m    ; model 
#  -b    : bootstrap  ici -4 SH-like 
#  -v    : proportion des sites invariables 
#  -c    ; nombre de taux de substitution défaut =4 
  
mpirun -np 5 phyml $option  -i $basename.phy-gb
# /usr/bin/phyml $option  -i $basename.phy-gb
#
# Cette ligne fonctionne 
#
#/usr/bin/phyml -d aa  -m RTREV +G +F -b -4 -v 0.0 -c 4 -a e  -i seaview.QaBcT5.phy
#  
#  -d aa : datatype nt = nucléotide , aa amino acids
#  -m    ; model 
#  -b    : bootstrap  ici -4 SH-like 
#  -v    : proportion des sites invariables 
#  -c    ; nombre de taux de substitution défaut =4 
#  -a    : gamma shape parametter  e 
# création de l'arbre 
# 
## unrooted
# version postcript
echo $basename.phy-gb_phyml_boot_trees.txt > tmp
cat /home/templates/unrootedps >> tmp 
phylip drawtree < tmp > /dev/null
mv plotfile $basename-unrooted.ps
# $basename.phy.drawtree.ps.res
#
# conversion ps vers ps pour l'inclusion LaTeX
ps2eps $basename-unrooted.ps 
# version povray 
#echo $basename.phy-gb_phyml_boot_trees.txt > tmp
#cat /home/templates/unrootedpovray >> tmp 
#phylip drawtree < tmp > /dev/null
#mv plotfile $basename-unrooted.pov
#
#$basename.phy.drawtree.povray.res
#
# Calcul de l'image povray 
#povray +I $basename-unrooted.pov  +W640 +H400  
 arbre avec valeur de boot . programme 
newicktops -boot -psonly $basename.phy-gb_phyml_tree.txt
mv $basename.ps $basename-bootstrap_value.ps
ps2eps  $basename-bootstrap_value.ps
#other tree type with newicks
# date
nw_support $basemame.phy-gb_phyml_tree.txt  $basename.phy-gb_phyml_boot_trees.txt | nw_display  -s -r -S  -w700 -v 40  - > $basename-tree.svg
# transformation svg en ps 
rsvg-convert -f ps $basename-tree.svg  -o $basename-tree_from_svg.ps
#conversiont ps vers eps 
ps2eps $basename-tree_from_svg.ps
#
# postscript to eps pour LaTeX
#
rm main.tex
mv *.tex ./$docpathbase/
mv *.eps ./$docpathbase/ 
createdoc $locpath $dir $subdir  $docpathbase $basename
#
# Les jobs enfin sont transmit à hoedic dans le repertoire samba 
#scp -r /tmp/$dir 
root@hoedic.cgm.cnrs-gif.fr:/home/public/exchange/AlPhy/$basename 
#ssh 
root@hoedic.cgm.cnrs-gif.fr chown -R exchange.exhange /home/public/exchange/AlPhy/$basename
#ssh ne fonctionne pas entre phobos et hoedic ... reste donc samba
smbclient //hoedic/exchange/  -c "prompt; cd AlPhy;recurse;  lcd /tmp ; mput  $dir "
## mount -o username=$WIN_USER,password=$WIN_PASSWORD -t cifs //$WIN_PC_IP $DESTPATH