# # (gH)   -_-  sparcc_graph.pl  ;  TimeStamp (unix) : 02 Juin 2015 vers 08:55

# aide à la construction des graphes issus de sparcc

use strict     ;
use warnings   ;

my $version = 1.1 ;
my $rfile   = "sparcc_graph.r" ;
my $urlgen  = "http://forge.info.univ-angers.fr/~gh/Metaseed/" ;
my $ferror  = "sparcc_graph.err" ;

###############################################################

sub aide {

###############################################################

print "\n" ;
print " sparcc_graph.pl version $version\n\n" ;
print " syntaxe : perl sparcc_graph.pl fcor fpval cormin cortrace ftaxo\n\n" ;
print "   fcor est le fichier des corrélations ;\n" ;
print "   fpval est le fichier des pvalues ;\n" ;
print "   en dessous de cormin, la corrélation est mise à zéro ;\n" ;
print "   le tracé ne prend en compte que les corrélations supérieures à cortrace ;\n" ;
print "   ftaxo (si présent) définit les taxons (ou groupes) de même couleur.\n" ;
print "\n" ;
print " exemples :\n" ;
print "    perl sparcc_graph.pl correl.txt pvalues.txt \n" ;
print "    perl sparcc_graph.pl ITS.correlations ITS.pvalues 0.02 0.4\n" ;
print "    perl sparcc_graph.pl x.abund.sparcc_correlation x.abund.sparcc_correlation O.01 0.3 x.abund_classes.txt\n" ;
print "\n" ;
print " pour plus d'aide, consulter la page ".$urlgen."sparcc_graph.php" ;
print "\n" ;
print "\n" ;

exit(-1) ;

} # fin de sub aide

######################### aide éventuelle

system("rm -rf $ferror") ;
if ($#ARGV==-1) {
  &aide() ; exit(0) ;
} ; # finsi

my @prms = &verificationParametres() ;
print "\n\n prms " ;
print(join(" ; ",@prms)) ;
print "  --prms \n" ;
&scriptRqgraph(@prms) ;  # transformation et tracé

print "\n" ;
print "\n" ;
print "-- fin normale du script sparcc_graph.pl\n\n" ;

exit(0) ;

###############################################################
#
# sous-programmes
#
###############################################################

sub  verificationParametres {

###############################################################

print " \n" ;
print("  1 / 2  Vérification des paramètres\n") ;
print " \n" ;

my $err      = 0  ;
my $fcor     = "" ;
my $fpval    = "" ;
my $cormin   = -1 ;
my $cortrace = -1 ;
my $fclass   = "" ;

print "  fichier de corrélations        : " ;
if (!$ARGV[0]) {
   $err++ ;
   print "non indiqué. " ;
} else {
   $fcor = $ARGV[0] ;
   print $fcor ;
   if (!-e $fcor) {
      print " NON VU." ;
      $err++ ;
   } else {
      print " PRESENT." ;
   } ; # finsi
} ; # fin si
print " \n" ;

print "  fichier de p-values            : " ;
if (!$ARGV[1]) {
   $err++ ;
   print "non indiqué. " ;
} else {
   $fpval = $ARGV[1] ;
   print $fpval ;
   if (!-e $fpval) {
      print " NON VU." ;
      $err++ ;
   } else {
      print " PRESENT." ;
   } ; # finsi
} ; # fin si
print " \n" ;

print "  seuil pour corrélation retenue : " ;
if (!$ARGV[2]) {
   print "non indiqué. On utilise la valeur par défaut : " ;
   $cormin = 0.01 ;
   print $cormin ;
} else {
   $cormin = $ARGV[2] ;
   print $cormin ;
   if ($cormin !~ /^[0-9]*\.[0-9]*$/) {
     $err++ ;
     print " INCORRECT (il faut un réel entre 0 et 1)." ;
   } else {
     print " OK." ;
   } ; # fin si
} ; # fin si
print " \n" ;

print "  corrélation pour tracé         : " ;
if (!$ARGV[2]) {
   print "non indiqué. On utilise la valeur par défaut : " ;
   $cortrace = 0.3 ;
   print $cortrace ;
} else {
   $cortrace = $ARGV[3] ;
   print $cortrace ;
   if ($ARGV[3] !~ /^[0-9]*\.[0-9]*$/) {
     $err++ ;
     print " INCORRECT (il faut un réel entre 0 et 1)." ;
   } else {
     print " OK." ;
   } ; # fin si
} ; # fin si
print " \n" ;

print "  fichier des classes            : " ;
if (!$ARGV[4]) {
     print "non indiqué. " ;
} else {
     $fclass = $ARGV[4] ;
     print $fclass ;
     if (!-e $fclass) {
      $err++ ;
      print " ABSENT." ;
    } else {
      print " PRESENT." ;
    } ; # fin si
    print " \n" ;
} ; # fin si

if (!-e $rfile) {
  $err++ ;
   print "\n" ;
   print "\n" ;
   print " Hélas, il vous manque le fichier $rfile..." ;
   print "\n" ;
   print " Vous pouvez le télécharger sur la page ".$urlgen."sparcc_graph.php\n" ;
   print "\n" ;
   print "  ou exécuter pour Linux la ligne suivante\n" ;
   print "     wget ".$urlgen."sparcc_graph.r\n" ;
   print "\n" ;
   print "\n" ;
} ; # fin si

if ($err>0) {
   print "\n" ;
   print "\n" ;
   print "  ==> ERREUR(S) sur les paramètres. STOP.\n" ;
   # &aide() ;
   print "\n" ;
   exit(-2) ;
} ; # fin si

return($fcor,$fpval,$cormin,$cortrace,$fclass) ;

} # fin de sub verificationParametres

###############################################################################

sub  scriptRqgraph() {

###############################################################################

print " \n" ;
print " \n" ;
print("  2 / 2  Transformation et tracé\n") ;
print " \n" ;

my $p_fcor  = $_[0] ; # "xmp_cor.txt"  ;
my $p_fpva  = $_[1] ; # "xmp_pval.txt" ;
my $p_cmin  = $_[2] ; # 0.01 ;
my $p_ctra  = $_[3] ; # 0.3  ;
my $p_fgrps = $_[4] ; # "xmp_grps.txt" ;

my $p_fpng = "sparcc_graph.png" ;

#/*
#print "PARAMETRES\n" ;
#print $_[0]."\n" ;
#print $_[1]."\n" ;
#print $_[2]."\n" ;
#print $_[3]."\n" ;
#print $_[4]."\n" ;
#print "-- PARAMETRES\n" ;
#*/

my $fs = "scriptlocal.r" ;

open(FICS,">$fs") or die("\n\nproblème pour écrire dans $fs.\n") ;
print(FICS "source('sparcc_graph.r')\n") ;
print(FICS "sparccQgraph('$p_fcor','$p_fpva',$p_cmin,$p_ctra,'$p_fgrps','$p_fpng')\n") ;
close(FICS) ;

system("cat $fs") ;

my $flog = "sparcc_graph.log.txt" ;
my $cmd  = "( rm -rf $p_fpng ; R --vanilla --no-save < $fs > $flog 2> $flog ) " ;
system($cmd) ;

if (-e $ferror) {
   print "\n" ;
  print "erreur de configuration R sur votre machine :\n" ;
  system("cat $ferror") ;
   print "\n" ;
   print 'Il faut exécuter, sous R : install.packages("qgraph",dependencies=TRUE)'."\n" ;
   print "STOP.\n" ;
   print "\n" ;
   exit(-2) ;
} else {

   if (-e $p_fpng) {
     print " en principe le fichier $p_fpng  contient le graphique désiré." ;
   } else {
     print " \n" ;
     print " ah, un petit souci. consultez $flog pour plus de détails..." ;
     print " \n" ;
   } ; # finsi

} ; # finsi

} # fin de sub scriptRqgraph

###############################################################################
