Index by: file name |
procedure name |
procedure call |
annotation
gscope_daedalus.tcl
(annotations | original source)
#rR Debut de gscope_daedalus.tcl
proc ChampDaedalus {Champ {Access ""} {Nom ""}} {
global ChampDaedalusAccessCourant ChampDaedalusNomCourant
if {$Access==""} { set Access $ChampDaedalusAccessCourant } else { set ChampDaedalusAccessCourant $Access }
if {$Nom ==""} { set Nom $ChampDaedalusNomCourant } else { set ChampDaedalusNomCourant $Nom }
set Hit [DaedalusHit $Access $Nom]
if {$Hit==""} { return "" }
set Valeur [ValeurDeLaBalise $Champ Hit "NePasRogner"]
return $Valeur
}
proc DaedalusHit {Access {Nom ""}} {
global DaedalusHit DaedalusNomCourant
if {$Nom==""} { set Nom $DaedalusNomCourant } else { set DaedalusNomCourant $Nom }
if {[info exists DaedalusHit($Nom,$Access)]} { return [set DaedalusHit($Nom,$Access)] }
if {[info exists DaedalusHit($Nom,"EstCharge")]} { return "" }
if {[info exists DaedalusHit]} { unset DaedalusHit }
set FichierDaedalus "[RepertoireDuGenome]/daedalushits/$Nom"
set DaedalusHit($Nom,"EstCharge") 1
if { ! [file exists $FichierDaedalus]} { return "" }
foreach Ligne [LesLignesDuFichier $FichierDaedalus] {
if { ! [regexp -nocase {[a-z]} $Ligne]} { continue }
scan $Ligne "%s %s" BH AccessLu
regsub " *$BH +$AccessLu" $Ligne "" Hit
regsub {>>$} $Hit ">" Hit
set LesACs [ValeurDeLaBalise AC Hit "NePasRogner"]
set DaedalusHit($Nom,$AccessLu) $Hit
set Hit [string trim $Hit]
set DaedalusHit($Nom,[string toupper $AccessLu]) $Hit
foreach AC [split $LesACs " "] {
set DaedalusHit($Nom,$AC) $Hit
set DaedalusHit($Nom,[string toupper $AC]) $Hit
}
}
return [DaedalusHit $Access $Nom]
}
proc TTT {} {
set A "Q92947-2"
if {[catch {set Sortie [exec getz -e -cs "\\\|" \[VARSPLIC:$A\]>protein]} Message]} {
FaireLire "error from getz \n$Message"
exit
}
Espionne $Sortie
exit
}
proc InformeAvecDaedalusHitPourTous {{Quoi ""} {Qui ""}} {
if {$Quoi==""} { set Quoi "OS_OC_GN_DE" }
if {[regexp "OS" $Quoi]} {
set FichierOrganismesDesPABs "[RepertoireDuGenome]/fiches/organismesdespabs"
if {[file exists $FichierOrganismesDesPABs]} {
foreach Ligne [LesLignesDuFichier $FichierOrganismesDesPABs] {
scan $Ligne "%s" NomLu
set DejaVu($NomLu,OS) 1
}
}
}
if {$Qui==""} { set Qui [ListeDesPABs] }
if {[EstUnPAB $Qui]} { set Qui [list $Qui] }
foreach Nom $Qui {
if {[EstUnPABMute $Nom]} { continue }
Espionne "I'll examine $Nom"
if {[regexp "OS" $Quoi] && [info exists DejaVu($Nom,OS)]} { continue }
set Narcisse [Narcisse $Nom]
if {[regexp "OS" $Quoi] && [regexp "^cio" $Narcisse]} {
set Valeur "7719 <<Ciona intestinalis>>"
set Ligne "$Nom $Valeur"
InformeSansDemander $Nom "=Organism: $Valeur"
AppendAuFichier $FichierOrganismesDesPABs $Ligne
if {[regexp "OC" $Quoi]} {
scan $Valeur "%s" TaxId
set Classe [TaxClass $TaxId "" "" Name]
if {$Classe!=""} {
Espionne "$Nom Taxonomy: $Classe"
InformeSansDemander $Nom "=Taxonomy: $Classe"
}
}
continue
}
set FHit "[RepertoireDuGenome]/daedalushits/$Nom"
if { ! [file exists $FHit]} { continue }
set Texte [ContenuDuFichier $FHit]
set OX ""
if {[info exists ExistePlusLoin]} { unset ExistePlusLoin }
while {[set BH [ValeurDeLaBalise "BlastHit" Texte]]!=""} {
set AC [ValeurDeLaBalise AC BH NePasRogner]
set ID [ValeurDeLaBalise ID BH NePasRogner]
set OX [ValeurDeLaBalise OX BH NePasRogner]
set GN [ValeurDeLaBalise GN BH NePasRogner]
if {[regexp "Name=" $GN]} {
regsub -all ";" $GN " "
set GN [StringApres "Name=" dans $GN]
}
set DE [ValeurDeLaBalise DE BH NePasRogner]
if {[EstUnAccessPDB $Narcisse] || \
[string equal -nocase $ID $Narcisse] || [regexp -nocase $Narcisse $AC]} { break }
if { ! [info exists ExistePlusLoin]} { set ExistePlusLoin [regexp -nocase $Narcisse $Texte] }
if {$ExistePlusLoin} { continue }
if { 0 && [OuiOuNon "For $Nom ID=$ID AC=$AC the hit \n$BH\nis not Narcisse $Narcisse\nDo I continue parsing\n\
[string range $Texte 0 500] ?"]} { continue }
break
}
if {[regexp "OS" $Quoi] && $OX!=""} {
set LesNames {}
foreach TaxId [split $OX " "] {
lappend LesNames "<[Tax $TaxId]>"
}
set Valeur "$OX <[join $LesNames "+"]>"
set Ligne "$Nom $Valeur"
AppendAuFichier $FichierOrganismesDesPABs $Ligne
InformeSansDemander $Nom "=Organism: $Valeur"
if {[regexp "OC" $Quoi]} {
scan $OX "%s" TaxId
set Classe [TaxClass $TaxId "" "" Name]
if {$Classe!=""} {
Espionne "$Nom Taxonomy: $Classe"
InformeSansDemander $Nom "=Taxonomy: $Classe"
}
}
}
if {[regexp "GN" $Quoi] && $GN!=""} {
InformeSansDemander $Nom "ValiGN: $GN"
}
if {[regexp "DE" $Quoi] && $DE!=""} {
InformeSansDemander $Nom "ValiDE: $DE"
}
}
if {[regexp "OS" $Quoi]} {
return $FichierOrganismesDesPABs
}
return
}
proc DaedalusHitsDuBlastPPourTous {{EnProcessExterne ""} {CommenceIci ""}} {
set Liste [ListeDesPABs]
if {$CommenceIci!=""} {
if {[set Trouve [lsearch -exact $Liste $CommenceIci]]>=0} {
set Liste [lrange $Liste [incr Trouve] end]
}
}
if { $EnProcessExterne == "EnProcessExterne" } {
set MaxDansMemeProcess 10
} else {
set MaxDansMemeProcess 999999
}
set RepDaedalusHits "[RepertoireDuGenome]/daedalushits"
if { ! [file exists $RepDaedalusHits]} { file mkdir $RepDaedalusHits }
set Keep 1
if {[glob -nocomplain "$RepDaedalusHits/*"]!={}} {
set Keep [OuiOuNon "Some files exist in $RepDaedalusHits/\nDo I keep all of them ?"]} {
}
set LesNouveaux {}
set DejaFaitsDansMemeProcess 0
foreach Nom $Liste {
if {[Fantome $Nom]} { continue }
set FichierDaedalusHits "$RepDaedalusHits/$Nom"
if {$Keep && [file exists $FichierDaedalusHits]} { continue }
if {[PasTouche $Nom]} { continue }
Espionne "DaedalusHitsDuBlastPPourTous $Nom"
AppendAuFichier "[RepertoireDuGenome]/daedalushits.log" "[pid] $FichierDaedalusHits [Date Nice]"
set Dae [DaedalusHits "DuBlastP" $Nom $FichierDaedalusHits]
FinPasTouche $Nom
if {$Dae==""} { continue }
lappend LesNouveaux $Dae
if {[incr DejaFaitsDansMemeProcess] > $MaxDansMemeProcess} {
exec gscope yes DaedalusHitsDuBlastPPourTous "EnProcessExterne" $Nom &
exit
}
}
return $LesNouveaux
}
proc DaedalusHits {Source NomOuListeOuTexte {FichierDaedalusHits ""} {KeepDaedalus ""}} {
Wup "Source can be DuRepDaedalus DuBlastP DeLaListe DuFlatText"
Wup "if KeepDadalus it returns the list FichierDaedalus RepDaedalus"
set KeepDaedalus [regexp -nocase "KeepDaedalus" $KeepDaedalus]
set Nom "NoName"
if {$Source=="DuRepDaedalus"} {
set RepDaedalus $NomOuListeOuTexte
} else {
if {$Source=="DuFlatText"} {
set FlatTexte $NomOuListeOuTexte
}
if {$Source=="DuBlastP"} {
set Nom $NomOuListeOuTexte
set FlatTexte [DaedalusFlatFileDuBlastP $Nom "GetText"]
}
if {$Source=="DeLaListe"} {
set FichierOuListe $NomOuListeOuTexte
set FlatTexte [DaedalusFlatFileDeLaListe $FichierOuListe "GetText"]
}
if {$FlatTexte==""} { return {} }
set RepDaedalus [DaedalusSrsbuild $FlatTexte]
}
if {$FichierDaedalusHits==""} {
set RepDaedalusHits "[RepertoireDuGenome]/daedalushits"
if { ! [file exists $RepDaedalusHits]} { file mkdir $RepDaedalusHits }
set FichierDaedalusHits "$RepDaedalusHits/$Nom"
}
set LesBeauxHits {}
# set Methode "DaedalusProtView"
set Methode "ExtractionDeProtein"
if {$Methode=="ExtractionDeProtein"} {
set ExpDaedalus [DaedalusGetz $RepDaedalus "GetExpects"]
if {[info exists ExpectDe]} { unset ExpectDe }
set LesPBDs {}
set LesACCESS {}
set LesPDBs {}
set LesGscopes {}
foreach Ligne [split $ExpDaedalus "\n"] {
set Expect 0.00099999
scan $Ligne "%s %s" Access Expect
set Access [StringApres "DAEDALUS:Flat_" dans $Access]
set ACCESS [string toupper $Access]
if {[regexp {_[0-9]+$} $Access]} {
regsub {_[0-9]+$} $Access "" ProtAccess
set Varsplic($ACCESS) $ProtAccess
}
if {[regexp {\-[0-9]+$} $Access]} {
regsub {\-[0-9]+$} $Access "" ProtAccess
set Varsplic($ACCESS) $ProtAccess
}
if {[EstUnAccessPDB $ACCESS]} {
set EMBL [EMBLduPDB $ACCESS "ACFirst"]
if {$EMBL!=""} {
lappend LesPDBs $EMBL
}
}
if {[EstUnAccessDUneBanqueBlastPDeGscope $ACCESS]} {
set EMBL [EMBLdeGscope $ACCESS "ACFirst"]
if {$EMBL!=""} {
lappend LesGscopes $EMBL
}
if {[regexp {[\:_]} $ACCESS Car]} { set ACCESS [StringApres $Car dans $ACCESS] }
}
lappend LesACCESS $ACCESS
set ExpectDe($ACCESS) $Expect
}
set OutDaedalus [DaedalusGetz $RepDaedalus "GetInfos"]
set FichierOutDaedalus "[RepertoireDuGenome]/daedalushits/$Nom.daedalus_output"
Sauve $OutDaedalus dans $FichierOutDaedalus
if { ! $KeepDaedalus } { file delete -force $RepDaedalus}
set SansV 1
set LesLignes [split $OutDaedalus "\n"]
LConcat LesLignes $LesPDBs
LConcat LesLignes $LesGscopes
lappend LesLignes "AC Thats all folks"
set LesLignes [split [join $LesLignes "\n"] "\n"]
set ClefPrecedente ""
foreach Ligne $LesLignes {
if { ! [regexp -nocase {[a-z]} $Ligne]} { continue }
if { [regexp {^ } $Ligne]} { continue }
if {$SansV} {
scan $Ligne "%s" Clef
regsub "$Clef " $Ligne "" Ligne
if {$Clef=="AC" && $ClefPrecedente=="AC"} {
set LesNouveauxACs [LesMotsDeLaLigne $Ligne]
set LesACs [concat $LesACs $LesNouveauxACs]
continue
}
set ClefPrecedente $Clef
if {$Clef=="AC"} {
if {[info exists PremierAC]} {
if {[info exists ExpectDe($PremierAC)]} {
set Expect [set ExpectDe($PremierAC)]
} else {
set Expect 0.000999
}
set PREMIERAC [string toupper $PremierAC]
if {$LesOXs=={} && $LesOSs!={}} {
set PremTax [Tax [lindex $LesOSs 0]]
if { ! [regexp {^[0-9]+$} $PremTax]} { set PremTax -1 }
set LesOXs [list $PremTax]
}
if {$LesOSs=={} && $LesOXs!={}} {
set PremTax [lindex $LesOXs 0]
if { ! [regexp {^[0-9]+$} $PremTax]} {
set PremOS "Inconnu inconnu"
} else {
set PremOS [Tax $PremTax]
}
set LesOSs [list $PremOS]
}
set SesBeauxHits($PREMIERAC) "<BlastHit $PremierAC>\
<AC [join $LesACs " "]>\
<ID $ID>\
<PN $Expect>\
<OX [string trim [join $LesOXs " "]]>\
<GN [string trim [join $LesGNs " "]]>\
<DE [string trim [join $LesDEs " "]]>\
<OS [string trim [join $LesOSs " "]]>\
</BlastHit>"
unset PremierAC
}
if {[regexp "Thats all folks" $Ligne]} { break }
set ID "No_ID"
set DE "No_DE" ; set LesDEs {}
set OS "No_OS" ; set LesOSs {}
set OX "No_OX" ; set LesOXs {}
set GN "No_GN" ; set LesGNs {}
set LesACs [LesMotsDeLaLigne $Ligne]
set PremierAC [lindex $LesACs 0]
continue
}
if {$Clef=="ID"} {
scan $Ligne "%s" ID
continue
}
if {$Clef=="OX"} {
regsub -nocase "NCBI_TaxID=" $Ligne "" Ligne
regsub -all {[^0-9 ]} $Ligne "" Ligne
set LesOXs [LesMotsDeLaLigne $Ligne]
set OX [lindex $LesOXs 0]
continue
}
if {$Clef=="GN"} {
regsub {\.$} $Ligne "" Ligne
lappend LesGNs $Ligne
set GN [lindex $LesGNs 0]
continue
}
if {$Clef=="OS"} {
regsub {\.$} $Ligne "" Ligne
lappend LesOSs $Ligne
continue
}
if {$Clef=="DE"} {
lappend LesDEs $Ligne
continue
}
} else {
set LesChamps [split $Ligne "|"]
set Description ""
ScanLaListe $LesChamps Hit ID Acc NCBI_TaxId Organism Description
set BonneDescription [join [lrange $LesChamps 5 end] " "]
if {$Description!=$BonneDescription} { FaireLire "CS character in following line\n$Ligne" }
lappend LesBeauxHits "$Acc $NCBI_TaxId $Description $Organism"
}
}
foreach ACCESS $LesACCESS {
if { ! [info exists SesBeauxHits($ACCESS)]} {
if { ! [info exists Varsplic($ACCESS)]} { continue }
if { ! [info exists SesBeauxHits([set Varsplic($ACCESS)])]} { continue }
set Hit [set SesBeauxHits([set Varsplic($ACCESS)])]
regsub -nocase {<BlastHit [^>]+>} $Hit "<BlastHit $ACCESS>" Hit
regsub -nocase {<AC [^>]+>} $Hit "<AC $ACCESS>" Hit
regsub -nocase {<ID [^>]+>} $Hit "<ID VARSPLIC:$ACCESS>" Hit
set SesBeauxHits($ACCESS) $Hit
}
lappend LesBeauxHits [set SesBeauxHits($ACCESS)]
}
}
if {$Methode=="DaedalusProtView"} {
Wup "Attention ne traite pas les PDB pour le moment"
set ViewDaedalus [DaedalusGetz $RepDaedalus "DaedalusProtView"]
foreach Ligne [split $ViewDaedalus "//"] {
set LesChamps [split $Ligne "|"]
ScanLaListe $LesChamps ID OC OS TaxId DE Expect
regsub -all {[^0-9]} $TaxId " " TaxId
set OX [join [LesMotsDeLaLigne $TaxId] " "]
regsub -all "\n" $DE " " DE
lappend LesBeauxHits "<BlastHit $ID>\
<ID $ID>\
<PN $Expect\
<OX $OX>\
<DE $DE>\
<OS $OS>\
<OC $OC>\
</BlastHit>"
}
}
if {$FichierDaedalusHits=="RetourneLesHits"} { return $LesBeauxHits }
set FDH [SauveLesLignes $LesBeauxHits dans $FichierDaedalusHits]
if {[file exists $FichierOutDaedalus]} { file delete -force $FichierOutDaedalus }
if {$KeepDaedalus} { return [list $FDH $RepDaedalus] }
return $FDH
}
proc DaedalusGetz {Repertoire {Commande ""}} {
if {$Commande==""} { set Commande "GetInfos" }
NousAllonsAuBoulot $Repertoire
set Sortie ""
if {$Commande=="GetInfos"} {
if {[catch {set Sortie [exec getz -f "AccNumber ID NCBI_TaxId GeneName Organism Description" -cs "\\\|" \[daedalus-id:*\]>protein]} Message]} {
FaireLire "error from getz \n$Message"
}
}
if {$Commande=="GetExpects"} {
if {[catch {set Sortie [exec getz -vf "Expect" \[daedalus:*\]]} Message]} {
FaireLire "error from getz \n$Message"
}
}
if {$Commande=="DaedalusProtView"} {
if {[catch {set Sortie [exec getz -view DaedalusProtView \[daedalus:*\]]} Message]} {
FaireLire "error from getz \n$Message"
}
}
OnRevientDuBoulot
return $Sortie
}
proc DaedalusSrsbuild {FlatFileOuTexte {Nom ""} {RepTmp ""}} {
if {[regexp "\n" $FlatFileOuTexte]} {
set FlatTexte $FlatFileOuTexte
if {$Nom==""} { set Nom "Flat" }
} else {
set FlatTexte [ContenuDuFichier $FlatFileOuTexte]
if {$Nom==""} { set Nom [file tail $FlatFileOuTexte] }
}
if { ! [regexp ".daedalus$" $Nom]} { append Nom ".daedalus" }
if {$RepTmp==""} {
set RepTmp [TmpFile Daedalus]
}
if { ! [file exists $RepTmp]} { file mkdir $RepTmp }
NousAllonsAuBoulot $RepTmp
while {[file exists $Nom] && [ContenuDuFichier $Nom]!=$FlatTexte} {
if {[OuiOuNon "[pwd]/$Nom already exists\nCan I replace it with the new Daedalus flatfile ?"]} {
break
}
}
Sauve $FlatTexte dans $Nom
if {[catch {exec srsbuild -w daedalus } Message] } {
global DejaVuSrsError
if { ! [info exists DejaVuSrsError]} {
FaireLire "error from srsbuild BUT I'll continue ... may be it isn't important ...\n$Message"
set DejaVuSrsError 1
}
}
if {[catch {exec srsbuild -l daedalus } Message] } {
global DejaVuSrsError
if { ! [info exists DejaVuSrsError]} {
FaireLire "error from srsbuild BUT I'll continue ... may be it isn't important ...\n$Message"
set DejaVuSrsError 1
}
}
OnRevientDuBoulot
return $RepTmp
}
proc DaedalusFlatFileDuBlastP {NomOuFichier {Sortie ""} {SeuilExpect ""} {MaxListe ""}} {
Wup "Sortie can be GetText (to return the text) or the name of the file to create"
Wup "if Sortie is empty see below"
set NomPossible [file tail $NomOuFichier]
if {$Sortie==""} { set Sortie "[TmpFile $NomPossible .].daedalus" }
if {$SeuilExpect=="" || $MaxListe==""} {
scan [TailleDuDescriptifDuBlastP] "%d %d %d %f" MinObliges MaxVoulus MaxPDB SeuilExpectVoulu
}
if {$SeuilExpect==""} { set SeuilExpect $SeuilExpectVoulu}
if {$MaxListe==""} { set MaxListe $MaxVoulus }
if { ! [regexp "/" $NomOuFichier] && [EstUnPAB $NomOuFichier]} {
set Nom $NomOuFichier
set Fichier "[RepertoireDuGenome]/blastp/$Nom"
} else {
set Nom [file tail $NomOuFichier]
set Fichier $NomOuFichier
}
if { ! [file exists $Fichier]} { return "" }
global ScoreDansProfil ; set ScoreDansProfil 1
set n [DecortiqueBlast $Fichier $SeuilExpect $MaxListe Query lBanqueId lAccess lDE lScore lPN]
set Daedale {}
set NomQuery [file tail $Query]
foreach BanqueId $lBanqueId Access $lAccess DE $lDE Score $lScore PN $lPN {
if {[EstUnAccessDUneBanqueBlastPDeGscope $BanqueId]} {
set Access $BanqueId
}
if {[regexp {^\(.+\)$} $Access]} { regsub -all {[\(\)]} $Access "" Access }
if {[regexp -nocase {VARSPLIC\:} $BanqueId]} { set Access [StringApres ":" dans $BanqueId] }
lappend Daedale "ID $Access"
lappend Daedale "BL Probe=$NomQuery ;Score=$Score ;Expect=$PN ;"
if {[EstUnAccessPDB $BanqueId]} {
regsub -nocase {_[A-Z]*$} $BanqueId "" BanqueIdSansChaine
lappend Daedale "DR pdb;$BanqueIdSansChaine;."
lappend Daedale "S0 $BanqueId pdb"
} elseif {[regexp -nocase {VARSPLIC\:} $BanqueId]} {
regsub "VARSPLIC" $BanqueId "PROT" ProtId
if {[regexp {_[0-9]+} $ProtId]} {
regsub {_[0-9]+} $ProtId "" ProtId
regsub {_[0-9]+} $Access "" ProtAccess
}
if {[regexp {\-[0-9]+} $ProtId]} {
regsub {\-[0-9]+} $ProtId "" ProtId
regsub {\-[0-9]+} $Access "" ProtAccess
}
lappend Daedale "DR prot;$ProtAccess;."
lappend Daedale "S0 $ProtId $ProtAccess"
} elseif {[regexp -nocase {SW\:|SPT\:|SPTNEW\:} $BanqueId]} {
lappend Daedale "DR prot;$Access;."
lappend Daedale "S0 $BanqueId $Access"
} else {
lappend Daedale "DR xxx;$Access;."
lappend Daedale "S0 $BanqueId $Access"
}
lappend Daedale "//"
}
if {$Sortie=="GetText"} { return [join $Daedale "\n"] }
return [SauveLesLignes $Daedale dans $Sortie]
}
proc DaedalusFlatFileDeLaListe {ListeOuFichier {Sortie ""} {NomPossible ""}} {
Wup "Sortie can be GetText (to return the text) or the name of the file to create"
Wup "if Sortie is empty see below"
if {$NomPossible==""} { set NomPossible "FlatFile" }
if {[llength $ListeOuFichier]==1} {
set Liste [LesLignesDuFichier $ListeOuFichier]
if {$NomPossible=="FlatFile"} { set NomPossible [file tail $ListeOuFichier] }
} else {
set Liste $ListeOuFichier
}
if {$Sortie==""} { set Sortie "[TmpFile $NomPossible .].daedalus" }
set Daedale {}
foreach Ligne $Liste {
scan $Ligne "%s" Access
lappend Daedale "ID $Access"
lappend Daedale "DR prot;$Access;."
lappend Daedale "//"
}
if {$Sortie=="GetText"} { return [join $Daedale "\n"] }
return [SauveLesLignes $Daedale dans $Sortie]
}
Index by: file name |
procedure name |
procedure call |
annotation
File generated 2022-04-05 at 12:55.