Index by: file name |
procedure name |
procedure call |
annotation
gscope_secator.tcl
(annotations | original source)
#rR gscope_secator
#rR ce n'est pas clair ... faut-il utiliser /biolo/secator ou le secator dans cluspack ???
#rR car il y a /biolo/secator ou dpc ou l'un ou l'autre dans cluspack
proc Secator {FichierMSF {Sortie ""}} {
if {$Sortie==""} { set Sortie "GetClusterFile" }
set Racine [TmpFile secator "" "_"]
file copy $FichierMSF $Racine
global env ; set env(SECATORHOME) "/biolo/secator"
global ExecutableSecator
#rR if { ! [info exists ExecutableSecator]} { set ExecutableSecator "secator" }
if { ! [info exists ExecutableSecator]} { set ExecutableSecator "/biolo/cluspack/binNew/cluspack" }
set OptionAlignment ""
set FichierDesClusters "$Racine.sec"
if {[regexp "cluspack" $ExecutableSecator]} {
set OptionAlignment "-dt=alignment -cm=bionj -nbc=secator"
set FichierDesClusters "$Racine.clu"
}
if {$ExecutableSecator=="dpc"} {
set OptionAlignment "alignment"
set FichierDesClusters "$Racine.dpc"
}
if {[catch {eval exec $ExecutableSecator $Racine $OptionAlignment} Message]} {
Warne "$ExecutableSecator $Racine $OptionAlignment\n failed with \n$Message"
return ""
}
if { ! [file exists $FichierDesClusters]} {
Warne "$ExecutableSecator didn't create $FichierDesClusters for \n$FichierMSF"
return ""
}
if {$Sortie=="ListAllOutputs"} {
set LesSorties [glob -nocomplain $Racine*]
return $LesSorties
}
if {$Sortie=="GetText"} { return [ContenuDuFichier $FichierDesClusters] }
if {$Sortie=="GetClusterFile"} { return $FichierDesClusters }
file copy $FichierDesClusters $Sortie
return $Sortie
}
proc LesAccessDuGroupe {NomOuMSF Query {Liste "Tous"} {Calculate ""}} {
if {$Liste=="Tous"} { return [GroupeSecator $NomOuMSF $Query "In" $Calculate] }
foreach Access [GroupeSecator $NomOuMSF $Query "In" $Calculate] {
set MoiAussi([string toupper $Access]) 1
}
set LesBons {}
foreach Access $Liste {
if { ! [info exists MoiAussi([string toupper $Access])] } { continue }
lappend LesBons $Access
}
Espionne $LesBons
return $LesBons
}
proc RapportGroupeSecator Nom {
global RepertoireDuGenome
global RapportGroupeSecator
if {[info exists RapportGroupeSecator($Nom)]} { return [set RapportGroupeSecator($Nom)] }
if {[info exists RapportGroupeSecator("EstCharge")]} { return "-1 -1" }
set FichierRapportGroupeSecator "$RepertoireDuGenome/fiches/rapportgroupesecator"
if {[file exists $FichierRapportGroupeSecator]} {
foreach Ligne [LesLignesDuFichier $FichierRapportGroupeSecator] {
scan $Ligne "%s %d %d" NomLu i n
set RapportGroupeSecator($NomLu) "$i $n"
}
set RapportGroupeSecator("EstCharge") 1
return [RapportGroupeSecator $Nom]
}
foreach PAB [ListeDesPABs] {
set MSF "$RepertoireDuGenome/msf/$PAB"
if { ! [file exists $MSF]} {
set i 0
set n 0
} else {
DecortiqueUnMSF $MSF LesNomsDeSequences
set LeGroupe [GroupeSecator $PAB $PAB "Out"]
set i [llength $LeGroupe]
set n [llength $LesNomsDeSequences]
}
AppendAuFichier $FichierRapportGroupeSecator "$PAB $i $n"
set RapportGroupeSecator($PAB) "$i $n"
}
return [RapportGroupeSecator $Nom]
}
proc TestRGS Nom {
set LeGroupe [GroupeSecator $Nom $Nom "Out"]
Espionne $LeGroupe
Espionne [llength $LeGroupe]
Espionne [RapportGroupeSecator $Nom]
exit
}
proc GroupeSecator {NomOuMSFOuAutre {Query "SameAs"} {InOut "Out"} {Calculate ""} {OutFile ""}} {
global GroupeSecator
Wup "InOut can be In, Out or ToutLeMonde, ToutLeMondeAvecGroupe,"
Wup "or AppendAuGroupeSecator if you want to complete the file groupesecator"
Wup "OutFile can be a filename but it works only with ToCalculate."
set OutQuery 0
set Racine "TrululuTrala"
if {$NomOuMSFOuAutre=="AppendAuGroupeSecator"} {
set OnAppend 1
set Nom "Bidon"
} else {
set OnAppend 0
}
set NomOuMSF $NomOuMSFOuAutre
set MayBeMSF $NomOuMSF
set Nom [file tail $NomOuMSF]
if {[file exists $MayBeMSF] && (! [EstUnPAB $Nom] || $Query!="SameAs")} {
set FichierMSF $MayBeMSF
if { ! [regexp "^/" $FichierMSF]} { set FichierMSF "[pwd]/$MayBeMSF" }
set Calculate "ToCalculate"
}
if {$Query=="" || $Query=="SameAs"} { set Query $Nom }
set QueryEstNom [string equal -nocase $Query $Nom]
set ToCalculate [string equal -nocase $Calculate "ToCalculate"]
set OnVeutToutLeMonde 0
set OnVeutToutLeMondeAvecGroupe 0
set UnGroupe 1
if {$InOut=="ToutLeMonde"} {
set OnVeutToutLeMonde 1
set UnGroupe 0
set Query "CacheToiQueryQuOnNeTeTrouvePas"
set ToCalculate 1
} elseif {$InOut=="ToutLeMondeAvecGroupe"} {
set OnVeutToutLeMondeAvecGroupe 1
set UnGroupe 0
set Query "CacheToiQueryQuOnNeTeTrouvePas"
set ToCalculate 1
} else {
set OutQuery [string equal -nocase $InOut "Out"]
}
set QUERY [string toupper $Query]
if { ! [info exists FichierMSF] || ! [file exists $FichierMSF]} {
if {[info exists GroupeSecator($QUERY)]} {
set LeGroupe [set GroupeSecator($QUERY)]
if {$OutQuery} {
return $LeGroupe
} else {
return [lappend LeGroupe $Query]
}
}
if {$QueryEstNom && [info exists GroupeSecator("EstCharge")]} {
if {$OutQuery} {
return {}
} else {
return [list $Query]
}
}
set FichierGroupeSecator "[RepertoireDuGenome]/fiches/groupesecator"
if { ! $ToCalculate && [file exists $FichierGroupeSecator]} {
foreach Ligne [LesLignesDuFichier $FichierGroupeSecator] {
scan $Ligne "%s" NomLu
set NOMLU [string toupper $NomLu]
set GroupeSecator($NOMLU) [lrange [split [string trim $Ligne] " "] 1 end]
}
if { ! $OnAppend} {
set GroupeSecator("EstCharge") 1
return [GroupeSecator $Nom $Query $InOut]
}
}
if { $OnAppend || ! $ToCalculate && [OuiOuNonMemo "Do I create the file $FichierGroupeSecator ?" 0]} {
foreach PAB [ListeDesPABs] {
if {[info exists GroupeSecator($PAB)]} { continue }
set FichierMSF "[RepertoireDuGenome]/msf/$PAB"
if { ! [file exists $FichierMSF]} { continue }
set PL [PremiereLigneDuFichier $FichierMSF]
if {[regexp "Clustalw inutile|NoSequence" $PL]} { continue }
set LeGroupe [GroupeSecator $PAB $PAB "Out" "ToCalculate"]
set Texte "$PAB [join $LeGroupe " "]"
AppendAuFichier $FichierGroupeSecator $Texte
Espionne "I appended : $Texte"
}
return [GroupeSecator $Nom $Query $InOut]
}
set FichierMSF "[RepertoireDuGenome]/msf/$Nom"
if { ! [file exists $FichierMSF]} { return {} }
}
set FichierSortie [Secator $FichierMSF]
if {$FichierSortie==""} { return {} }
regsub {\.[a-z]+$} $FichierSortie "" Racine
set LeGroupe {}
set OnLeTient 0
set Numero -1
foreach Ligne [LesLignesDuFichier $FichierSortie] {
if { ! [regexp -nocase {[a-z]+} $Ligne] || [regexp -nocase "^Number of clusters" $Ligne]} { continue }
if {[regexp -nocase {^Cluster [0-9]|^unclustered } $Ligne]} {
if { ! $OnVeutToutLeMondeAvecGroupe && ! $OnVeutToutLeMonde && $OnLeTient} { break }
set Numero ""
scan $Ligne "%s %s" Groupe Numero
if { ! [regexp {^[0-9]} $Numero]} { set Numero -1 }
set LeGroupe {}
continue
}
scan $Ligne "%s" Access
if {[string toupper $Access]==[string toupper $Query]} {
set OnLeTient 1
if {$OutQuery} { continue }
}
lappend ToutLeMondeAvecGroupe "$Access $Numero"
lappend ToutLeMonde $Access
lappend LeGroupe $Access
}
if {[regexp "tmp" $Racine]} {
foreach Fichier [glob -nocomplain "$Racine*"] {
file delete $Fichier
}
}
set Resultat $LeGroupe
if {$OnVeutToutLeMonde} { set Resultat $ToutLeMonde }
if {$OnVeutToutLeMondeAvecGroupe} { set Resultat $ToutLeMondeAvecGroupe }
if {$UnGroupe && $Groupe=="unclustered"} { set Resultat $ToutLeMonde }
if {$OutFile==""} { return $Resultat }
return [SauveLesLignes $Resultat dans $OutFile]
}
proc LesClustersDeCluspack {TexteOuFichier {GetIt ""}} {
if {$GetIt==""} { set GetIt "GetGroupsAndMembers" }
if {[regexp "\n" TexteOuFichier]} {
set Texte $TexteOuFichier
} else {
set Texte [ContenuDuFichier $TexteOuFichier]
}
Espionne $Texte
set ToutLeMondeAvecGroupe {}
set LesGroupesEtLeursMembres {}
set LesGroupes {}
set LesMembres {}
set OnLeTient 0
append Texte "\nThatsAllFolks"
foreach Ligne [split $Texte "\n"] {
if { ! [regexp -nocase {[a-z]+} $Ligne] || [regexp -nocase "^Number of clusters" $Ligne]} {
continue
}
if {[regexp -nocase {^Cluster [0-9]|^unclustered seq} $Ligne] | $Ligne=="ThatsAllFolks"} {
set Numero ""
scan $Ligne "%s %s" Groupe Numero
if { ! [regexp {^[0-9]} $Numero]} { set Numero -1 }
if {[info exists NumeroCourant]} {
lappend LesGroupesEtLeursMembres [list $NumeroCourant $LesMembres]
if {$Ligne=="ThatsAllFolks"} { break }
set LesMembres {}
}
set NumeroCourant $Numero
continue
}
scan $Ligne "%s" Access
lappend ToutLeMondeAvecGroupe "$Access $Numero"
lappend LesMembres $Access
}
if {$GetIt=="GetGroupsAndMembers"} { return $LesGroupesEtLeursMembres }
if {$GetIt=="GetAllWithGroup"} { return $ToutLeMondeAvecGroupe }
return [list $ToutLeMondeAvecGroupe $LesGroupesEtLeursMembres]
}
proc Cluspack {ListeOuTexteOuFichier {FichierSortie ""}} {
#rR j'ail'impression que ce n'est pas pour un alignement ... mais pour un fichier de coordonnees.
if {$FichierSortie==""} { set FichierSortie "GetGroupsAndMembers" }
if {[regexp "\n" $ListeOuTexteOuFichier]} {
set Liste [split $ListeOuTexteOuFichier "\n"]
} elseif { ! [regexp " " $ListeOuTexteOuFichier]} {
set Liste [LesLignesDuFichier $ListeOuTexteOuFichier]
} else {
set Liste $ListeOuTexteOuFichier
}
set nL 0
set nCOld -1
foreach Ligne $Liste {
incr nL
set nC [expr [llength $Ligne] - 1]
if {$nCOld==-1} { set nCOld $nC }
if {$nC!=$nCOld} { FaireLire "Missing values in line $Ligne for Cluspack" }
}
set LeTexte {}
lappend LeTexte "$nL $nC"
lappend LeTexte ""
LConcat LeTexte $Liste
NousAllonsAuBoulot
set Racine "[TmpFile Cluspack]"
regsub -all {\.} $Racine "_" Racine
set FichierSecatorIn [SauveLesLignes $LeTexte dans "$Racine.in"]
# set ExecutableCluspack "/biolo/secator/cluspack"
set ExecutableCluspack "/biolo/cluspack/binNew/cluspack"
if {[catch {exec $ExecutableCluspack $FichierSecatorIn \
-data_type=coordinates -clustering_method=ward -nb_clusters=secator} Message]} {
FaireLire "cluspack failed with message\n $Message"
return ""
}
set FichierSecatorOut "$Racine.clu"
if { ! [file exists $FichierSecatorOut]} { return "" }
if {$FichierSortie=="GetAsIs"} {
set Sortie [ContenuDuFichier $FichierSecatorOut]
} elseif {$FichierSortie=="GetGroupsAndMembers"} {
set Sortie [LesClustersDeCluspack $FichierSecatorOut "GetGroupsAndMembers"]
} elseif {$FichierSortie=="GetAllWithGroup"} {
set Sortie [LesClustersDeCluspack $FichierSecatorOut "GetAllWithGroup"]
} else {
file copy $FichierSecatorOut $FichierSortie
set Sortie $FichierSortie
}
if {[file exists "$Racine.in"]} { file delete "$Racine.in" }
if {[file exists "$Racine.clu"]} { file delete "$Racine.clu" }
OnRevientDuBoulot
return $Sortie
}
proc GroupeDpc {Nom {Query "SameAs"} {InOut "Out"}} {
global GroupeDpc
Wup "Attention GroupeDpc ne calcule pas il ne donne que la valeur"
Wup "il faut avoir fait GroupeSecator en positionnant ExecutableSecator a dpc"
Wup "Ca devrait marcher si il y a le FichierSortieDpc"
set OnAppend 0
if {$Query=="" || $Query=="SameAs"} { set Query $Nom }
set QueryEstNom [string equal -nocase $Query $Nom]
set OnVeutToutLeMonde 0
set OnVeutToutLeMondeAvecGroupe 0
if {$InOut=="ToutLeMonde"} {
set OnVeutToutLeMonde 1
set Query "CacheToiQueryQuOnNeTeTrouvePas"
} elseif {$InOut=="ToutLeMondeAvecGroupe"} {
set OnVeutToutLeMondeAvecGroupe 1
set Query "CacheToiQueryQuOnNeTeTrouvePas"
} else {
set OutQuery [string equal -nocase $InOut "Out"]
}
set QUERY [string toupper $Query]
if {[info exists GroupeDpc($QUERY)]} {
set LeGroupe [set GroupeDpc($QUERY)]
if {$OutQuery} {
return $LeGroupe
} else {
return [lappend LeGroupe $Query]
}
}
if {$QueryEstNom && [info exists GroupeDpc("EstCharge")]} {
if {$OutQuery} {
return {}
} else {
return [list $Query]
}
}
set FichierGroupeDpc "[RepertoireDuGenome]/fiches/groupedpc"
if {[file exists $FichierGroupeDpc]} {
foreach Ligne [LesLignesDuFichier $FichierGroupeDpc] {
scan $Ligne "%s" NomLu
set NomLu [string toupper $NomLu]
set GroupeDpc($NomLu) [lrange [split [string trim $Ligne] " "] 1 end]
}
if { ! $OnAppend} {
set GroupeDpc("EstCharge") 1
return [GroupeDpc $Nom $Query $InOut]
}
}
set LeGroupe {}
set OnLeTient 0
set FichierSortieDpc "[RepertoireDuGenome]/dpc/$Nom"
if { [FileAbsent $FichierSortieDpc] } {
foreach Ext [list ".dpc" ".clu"] {
set Possible $FichierSortieDpc$Ext
if {[FileExists $Possible]} { set FichierSortieDpc $Possible ; break }
}
append FichierSortieDpc ".dpc"
}
if { [FileAbsent $FichierSortieDpc] } { return {} }
foreach Ligne [LesLignesDuFichier $FichierSortieDpc] {
if { ! [regexp -nocase {[a-z]+} $Ligne] || [regexp -nocase "^Number of clusters" $Ligne]} { continue }
if {[regexp -nocase {^Cluster [0-9]|^unclustered seq} $Ligne]} {
if {$OnLeTient} { break }
set Numero ""
scan $Ligne "%s %s" Groupe Numero
if { ! [regexp {^[0-9]} $Numero]} { set Numero -1 }
set LeGroupe {}
continue
}
scan $Ligne "%s" Access
if {[string toupper $Access]==[string toupper $Query]} {
set OnLeTient 1
if {$OutQuery} { continue }
}
lappend ToutLeMondeAvecGroupe "$Access $Numero"
lappend ToutLeMonde $Access
lappend LeGroupe $Access
}
if {$OnVeutToutLeMonde} { return $ToutLeMonde }
if {$OnVeutToutLeMondeAvecGroupe} { return $ToutLeMondeAvecGroupe }
if {$Groupe=="unclustered"} {
return $ToutLeMonde
} else {
return $LeGroupe
}
}
proc GroupeOumy {Nom {Query "SameAs"} {InOut "Out"}} {
global GroupeOumy
Wup "Attention GroupeOumy ne calcule pas il ne donne que la valeur"
Wup "il faut avoir fait GroupeSecator en positionnant ExecutableSecator a Oumy"
Wup "Ca devrait marcher si il y a le FichierSortieOumy"
set OnAppend 0
if {$Query=="" || $Query=="SameAs"} { set Query $Nom }
set QueryEstNom [string equal -nocase $Query $Nom]
set OnVeutToutLeMonde 0
set OnVeutToutLeMondeAvecGroupe 0
if {$InOut=="ToutLeMonde"} {
set OnVeutToutLeMonde 1
set Query "CacheToiQueryQuOnNeTeTrouvePas"
} elseif {$InOut=="ToutLeMondeAvecGroupe"} {
set OnVeutToutLeMondeAvecGroupe 1
set Query "CacheToiQueryQuOnNeTeTrouvePas"
} else {
set OutQuery [string equal -nocase $InOut "Out"]
}
set QUERY [string toupper $Query]
if {[info exists GroupeOumy($QUERY)]} {
set LeGroupe [set GroupeOumy($QUERY)]
if {$OutQuery} {
return $LeGroupe
} else {
return [lappend LeGroupe $Query]
}
}
if {$QueryEstNom && [info exists GroupeOumy("EstCharge")]} {
if {$OutQuery} {
return {}
} else {
return [list $Query]
}
}
set FichierGroupeOumy "[RepertoireDuGenome]/fiches/groupeoumy"
if {[file exists $FichierGroupeOumy]} {
foreach Ligne [LesLignesDuFichier $FichierGroupeOumy] {
scan $Ligne "%s" NomLu
set NomLu [string toupper $NomLu]
set GroupeOumy($NomLu) [lrange [split [string trim $Ligne] " "] 1 end]
}
if { ! $OnAppend} {
set GroupeOumy("EstCharge") 1
return [GroupeOumy $Nom $Query $InOut]
}
}
set LeGroupe {}
set OnLeTient 0
set FichierSortieOumy "[RepertoireDuGenome]/Oumy/$Nom"
if { ! [file exists $FichierSortieOumy]} { append FichierSortieOumy ".Oumy" }
if { ! [file exists $FichierSortieOumy]} { return {} }
foreach Ligne [LesLignesDuFichier $FichierSortieOumy] {
if { ! [regexp -nocase {[a-z]+} $Ligne] || [regexp -nocase "^Number of clusters" $Ligne]} { continue }
if {[regexp -nocase {^Cluster [0-9]|^unclustered seq} $Ligne]} {
if {$OnLeTient} { break }
set Numero ""
scan $Ligne "%s %s" Groupe Numero
if { ! [regexp {^[0-9]} $Numero]} { set Numero -1 }
set LeGroupe {}
continue
}
scan $Ligne "%s" Access
if {[string toupper $Access]==[string toupper $Query]} {
set OnLeTient 1
if {$OutQuery} { continue }
}
lappend ToutLeMondeAvecGroupe "$Access $Numero"
lappend ToutLeMonde $Access
lappend LeGroupe $Access
}
if {$OnVeutToutLeMonde} { return $ToutLeMonde }
if {$OnVeutToutLeMondeAvecGroupe} { return $ToutLeMondeAvecGroupe }
if {$Groupe=="unclustered"} {
return $ToutLeMonde
} else {
return $LeGroupe
}
}
Index by: file name |
procedure name |
procedure call |
annotation
File generated 2022-04-05 at 12:55.