#  (gH)   -_-  taxoshspdb.pl  ;  TimeStamp (unix) : 09 Juillet 2012 vers 16:52
##
## analyse des lignées taxonomiques de la sHSPdb

use LWP::Simple;

## partie 1  : récupérer les numéros d'accession et les identifiants NCBI/TB
## partie 2  : interroger NCBI/TB en mode GET pour rapatrier les informations

$a = 1 ; # 0 pour portable Ubuntu, 1 pour sirius et forge
$uname = `uname -a` ;

print "uname = $uname\n\n" ;

$systm = "?" ;
if  ($uname =~ /sirius/) { $systm = "forge" ; } ;
if  ($uname =~ /forge/)  { $systm = "forge" ; } ;
if  ($uname =~ /janus/)  { $systm = "localhost" ; } ;
if  ($uname =~ /ghCHU/)  { $systm = "ghCHU" ; $a = 0 ;} ;
if  ($uname =~ /ghchu/)  { $systm = "localhost" ; $a = 0 ;} ;

## 1. numéros d'accession

#  1.1 requete MYSQL

 $qre  = " SELECT a.accession, a.organism_id FROM proteins a , notes b  " ;
 $qre .= " WHERE  a.accession = b.accession AND expertise = 1  " ;
 $qre .= " ORDER BY a.accession  " ;

 $res = ` mysql --user=anonymous --password=anonymous -h localhost HSP  -e ' $qre ' ` ;

#  1.2 conversion en tableau

 $res =~ tr/\t/ /;
 $res =~ s/  / /g ;

 # print "$res\n" ;

# 2. lignées taxonomiques

$nomsor = "taxoshspdb.lst" ;

open(SORTIE,">$nomsor") || die ("Erreur de creation de SORTIE ($nomsor)") ;

$nbp = 0 ;
$urlbase = "http://www.ncbi.nlm.nih.gov/Taxonomy/Browser/wwwtax.cgi?id=" ;
print "  Rang  Accession   Taxo_id    Lignée \n" ;
while ($res =~ m/(.*?) (.*?)\n/gs) {
  ($idp,$idt) = ($1,$2) ;
  if ($idt==0) { next ; } ;
  $nbp++ ;
  $tax = "???" ;
  $content = get($urlbase.$idt) ;
  $content =~ s/ //g ;
  $ideb    = index($content,"(full)") ;
  $content = substr($content,$ideb) ;
  $ifin    = index($content,"</dd>") ;
  if ($ifin==-1) {
    $ifin = index($content,"<HR") ;
  } ; # fin si
  $lineage = substr($content,0,$ifin) ;
  # à cause de http://www.ncbi.nlm.nih.gov/Taxonomy/Browser/wwwtax.cgi?id=4577
  # on se limite aux 30 premiers mots
  # à cause de http://www.ncbi.nlm.nih.gov/Taxonomy/Browser/wwwtax.cgi?id=3357
  # on recherche <HR si on n'a pas trouvé </dd>
  $tax = "" ;
  $nbm = 0 ;
  while ($lineage =~ m|<.*?>(.*?)</.*?>|gs) {
    $ptax = $1 ;
    $idx = index("  $ptax",">") ;
    if ($idx>0) { $ptax = substr($ptax,$idx-1) ; } ;
    $nbm++ ;
    $ptax =~ s/ //g ;
    if ($nbm<=30) {
      if ($ptax ne "root") {
         if ($ptax ne "") {
           $tax .= " $ptax" ;
         } ; # fin si
      } ; # fin si
    } ; # fin si
  } ; # fin de tant que
  $ligs  = "" ;
  $ligs .= sprintf("  %4d",$nbp) ;
  $ligs .= "   " ;
  $ligs .= sprintf("%-14s",$idp) ;
  $ligs .= sprintf("  %9d",$idt) ;
  $ligs .= "    $tax" ;
  $ligs .= "\n" ;
  print $ligs ;
  print SORTIE $ligs ;
} ; # fin de tant que
close (SORTIE) ;

print "\n\n" ;
print " en principe, vous pouvez consulter $nomsor.\n\n" ;
# system("head $nomsor") ;
