#! /usr/local/ARCH/alpha/bin/bash


###########
#Fonctions#
###########

#Usage du programme
function help {
        echo "Usage: $pg  <fna file> <directory of your matrix(OPTIONNAL)>" 
        exit 1
}

#Erreur
function Error {
        touch $dirAmiga"/_ERROR_"
	echo $2 >  $dirAmiga"/_ERROR_"
        exit 2
}

#################################################
#Verification des  aguements passes au programme#
#################################################

#Nom du programme
pg=`basename $0`

#Tester le nombre d'arguments passe au programme
if [ $# -eq 0 ]
	then help $pg
fi

if [ $# -ge 3 ] 
        then help $pg 
fi
 
if [ ! -f $1 ]
        then echo "$1" " not found, exit " ; exit 2
fi


#nom du repertoire des resultats amiga pour l'execution en cours
labelseq=$1

dirAmiga=`ls $labelseq| sed 's/[a-zA-Z0-9.]*$//'`

if [ $dirAmiga ="" ]
	then dirAmiga="./"
fi


#Home amiga
AMIGAHOME="/env/export/a/fc3d11/home/jlesaux/boooooooo/"

echo "Binaries directory :  "$AMIGAHOME

#Tester si le repertoire existe des resultats amiga
if [ ! -d $dirAmiga ] 
	then help $pg 
fi

#Tester si le repertoire amiga existe
if [ ! -d $AMIGAHOME ] 
	 then Error $dirAmiga 1
fi


##########################
#Variables d'environnment#
##########################

source /etc/profile 2> /dev/null

source /$dirAmiga/session.source 2> /dev/null

PATH=$AMIGAHOME:$PATH

#################
#Variable amiga #
#################


echo " your file : "$labelseq 

seq=$labelseq

StringStart="/ATG/GTG/TTG/CTG/"

StringStop="/TAA/TAG/TGA/"

if [ $# -eq 2 ]
	then if [ -f $2 ];
		then dirSpecies=` ls $2 | sed 's/[a-zA-Z0-9.]*$//'`
		speciesFile=$2 
	     fi
	else rm $seq.* 2> /dev/null
fi



########################################
#se deplacer dans le reperoire resultat#
########################################


cd $dirAmiga

##############################################################
#Formatage de la sequence et calcul de sa longueur et du GC %#
##############################################################

cp $labelseq tmp.seq
cat tmp.seq | gawk 'BEGIN {getline ;print $O} { gsub("[^A-Z]",""); gsub("[^ATGC]","N"); if ( $0 != "") print $O; }' > $labelseq

#rm tmp.seq

tail +2 $seq | tr -d "\012" | wc -c > $labelseq".length"

#longueur de la sequence
lSEQ=` cat  $labelseq.length `

#longueur de la sequence sans N
lSEQnoN=`tail +2 $seq | tr -d "\012" | tr -d "N" | wc -c`

echo "Longueur de la sequence = $lSEQ "
echo "Longueur de la sequence sans N = $lSEQnoN "

#% GC
GC=`tail +2 $seq | gawk '$0 !~ /^$/ {
    long+=length($0)
    nbG+=gsub("G","X")
    nbC+=gsub("C","X")
}
END {
    printf( "%s", ((nbG+nbC)/long)*100 )
}' `

echo "GC pct = $GC"


GCcontent=`echo $GC | awk '{  print sprintf("%2.0d",$0) }'`

echo "computed GC content : " $GCcontent

if [ $GCcontent -lt 45 ]
	then source $AMIGAHOME/Low.seuils
else
	if [ $GCcontent -ge 45 -a $GC -lt 55 ]
		then source $AMIGAHOME/Medium.seuils
	else
		if [ $GCcontent -ge 55 ]
			then source $AMIGAHOME/High.seuils
		fi
	fi
fi




##################################################################
#Si l'utilisateur a choisi de generer automatiquement une matrice#
#    AutoMatrix == "Automatic"                                   #
##################################################################

if [ `ls $dirAmiga/*.bin 2> /dev/null | wc -l ` -eq 0  ]
	then AutoMatrix="Automatic"
	else AutoMatrix="Generated"
fi

if [ "$AutoMatrix" = "Automatic" ]; then

    echo "Matrix is being generated..."

    #Calcul de la longueur min des orfs pour generer matrice
    long_orf_matrix=`echo $GC | awk '{  
    long =  int( 16.87 * $1 - 199.76 )  
    if (long < 200) long = 200
    print long
    }' ` 
    
    echo "long_orf_matrix = $long_orf_matrix"

    #Calcul de l'ordre de la matrice (4exp(k) * 100 = 80 % de Lmin de la sequence) 
    ordreMat=` echo  $lSEQnoN | awk ' {
	k = 0
	if ($1 > 8000   ) k = 3
	if ($1 > 32000  ) k = 4
 	if ($1 > 128000 ) k = 5

	printf ("%s",k)
    }' `
    echo "ordreMat = $ordreMat"
    
    #Verif ordre de la matrice si 0 erreur
    if [ "$ordreMat" = "0" ]
	then  Error $dirAmiga 4
    fi

    #generer du codant
    prokov_orf -l $long_orf_matrix  -s $StringStart -S $StringStop -o $seq >  $seq".codant"
    
    #Construire la matrice
    prokov_learn -k $ordreMat -K 1 -I -o $seq".mat1.bin" $seq".codant"
    
    #Pattern du debut du nom de fichier de la matrice avec le nom de repertoire
    begMat=$seq".mat"
    
    #Pattern de fin du nom de fichier de la matrice
    endMat=".bin"
    
fi
 

##############################################################
#Si l'utilisateur a choisi d'utiliser une matrice specifique #
#d'un organisme $species et $AutoMatrix == "Generated"       #
##############################################################
if [ "$AutoMatrix" = "Generated" ]; then
    #tester si il existe au moins une matrice
    if [ -f $speciesFile ]; then
	    #Pattern du debut du nom de fichier des matrices avec le nom de repertoire
    	begMat=`ls $speciesFile | sed 's/[0-9]*.bin//'`
    
   	#Pattern de fin du nom de fichier des matrices
   	endMat=".bin"
   else
    	Error $dirAmiga 2 
   fi
else
	begMat=$seq".mat"
	endMat=".bin"	
fi  


##############
#Lancer amiga#
##############

#diviser les parametres par 100
Sure_ss_I=`echo $Sure_ss_I | awk '{print $1 / 100}' `
Sure_os_I=`echo $Sure_os_I | awk '{print $1 / 100}' `
Sure_prob_O=`echo $Sure_prob_O | awk '{print $1 / 100}' `
Prob_glob_IO=`echo $Prob_glob_IO | awk '{print $1 / 100}' `



amiga_run.sh $seq $begMat $endMat $StringStart $StringStop $Prob_Pc $Sure_Pc $Prob_LMin $Sure_LMin $Sure_ss_I $Sure_os_I  $Sure_prob_O  $Prob_glob_IO $AMIGAHOME #2> $dirAmiga"/_ERROR_"


###############################################
#Si l'utilisateur a choisi d'executer PROFED  #
#$profed == "CHECKED"                        #
###############################################

#if [ "$profed" = "CHECKED" ]; then
#    echo "run profed -r -c $seq.curve1 -f  $seq.cds.lst -l $seq.60.comb.lstort | sort -n -k1 > $seq.fed "
#    profed -r -c $seq.curve1 -f  $seq.cds.lst -l $seq.60.comb.lstort | sort -n -k1 > $seq.fed #2> $dirAmiga"/_ERROR_"
#fi

##################################################
#Si l'utilisateur a choisi d'executer translate  #
#$translate == ""CHECKED"                        #
##################################################
#Si code micloplasme
if [ "$TGA" = "CHECKED" ]; then
 	code=3
#sinon code standard
else
   	code=0
fi
file_cds_fna=$seq".cds.fna"
file_translate=$seq".cds.faa"
    
pwg_translate -c $code < $file_cds_fna > $file_translate  #2> $dirAmiga"/_ERROR_"


#################################
#Fin Creation d'un fichier _END_#
#################################

touch $dirAmiga"/_END_"
