#rR gscope_affiche.tcl
proc RechercheDansInfo Texte {
global ListeDesContenuInfo
if { ! [info exists ListeDesContenuInfo]} {
foreach Boite $ListeDeBoites {
set Nom [Box $Boite nom]
set Info [ExtraitInfo $Nom]
if {$Info != ""} {
lappend ListeDesContenuInfo [string toupper $Info]
} else {
lappend ListeDesContenuInfo [string toupper "Nom: $Nom"]
}
}
}
}
proc AfficheLeRSF TexteOuNomOuFichierRSF {
set RSF ""
if {[regexp "\n" $TexteOuNomOuFichierRSF]} {
set FichierRSF "RSF"
set RSF $TexteOuNomOuFichierRSF
} else {
if {[regexp {\.msf$} $TexteOuNomOuFichierRSF]} {
regsub {\.msf$} $TexteOuNomOuFichierRSF "" TexteOuNomOuFichierRSF
}
set FichierRSF $TexteOuNomOuFichierRSF
set Queue [file tail $TexteOuNomOuFichierRSF]
if {[EstUnPAB $Queue]} {
set FichierRSF "[RepertoireDuGenome]/rsf/$Queue.rsf"
if { ! [file exists $FichierRSF]} {
set FichierRSF "[RepertoireDuGenome]/rsf/$Queue"
}
if { ! [file exists $FichierRSF]} {
set FichierRSF "[RepertoireDuGenome]/macsimRsf/$Queue.rsf"
}
if { ! [file exists $FichierRSF]} {
set FichierRSF "[RepertoireDuGenome]/macsimRsf/$Queue"
}
if { ! [file exists $FichierRSF]} {
set FichierRSF $TexteOuNomOuFichierRSF
}
}
if {[file exists $FichierRSF]} {
set RSF [ContenuDuFichier $FichierRSF]
}
}
if { ! [regexp {^!!RICH} $RSF]} { return "" }
return [DessineMoiUnRSF $RSF $FichierRSF]
}
proc DernierPAB {{Comment ""} {Format ""}} {
if {$Comment==""} { set Comment "DansLaListe"}
switch $Comment {
"EnPosition" { scan [lindex [LesPABsDansLOrdre] end] "%s" Dernier }
"DansLaListe" { set Dernier [lindex [ListeDesPABs] end] }
"EnNumero" { set Dernier [lindex [lsort [ListeDesPABs]] end] }
default { FaireLire "wrong argument in DernierPAB" ; return [DernierPAB] }
}
if {$Format=="AvecBornes"} {
return "$Dernier [Box $Dernier debut] [Box $Dernier fin] [Box $Dernier orient]"
} else {
return $Dernier
}
}
proc TousToTFA {} {
foreach F [glob "*.nuc"] {
regsub ".nuc$" $F ".tfa" T
regsub ".nuc$" $F "" T
if {[file exists "$T.tfa"]} { continue }
set TFA [SequenceFormatTFA [ContenuDuFichier $F] ">$T" "gcg"]
Espionne [Sauve $TFA dans "$T.tfa"]
}
exit
}
proc ShowBlastFromSelection {Selection {Dir ""}} {
if { ! [regexp "/" $Dir]} { set Dir "[RepertoireDuGenome]/$Dir" }
foreach Mot [LesMotsDeLaLigne $Selection] {
regsub -all {[><=\+]} $Mot "" Mot
set Fichier "$Dir/$Mot"
if {[FileExists $Fichier]} { return [AfficheFichier $Fichier "AvecSegAlignement"] }
}
return ""
}
proc SendToWeb Texte {
Log "SendToWeb $Texte" /home/ripp/log/gscopehtmlserver.log
# regsub -all {<} $Texte "\<" Texte
# regsub -all {>} $Texte "\>" Texte
return "
$Texte
"
}
proc Dismiss w {
global PagePropre
if {[info exists PagePropre($w)]} { unset PagePropre($w) }
if {[PourWscope]} { return "'" }
catch {after 10 destroy $w}
return $w
}
proc Affiche {Page {Maniere ""} {NomDuFichierOrigine ""}} {
return [AfficheVariable $Page $Maniere $NomDuFichierOrigine]
}
proc AfficheVariable {Page {Maniere ""} {NomDuFichierOrigine ""}} {
Wup "Cette proc est le coeur de Gscope"
Wup "Most used procedure ... : "
Wup "Shows the text Page in a listbox, with a lot of buttons."
Wup "Copyright 1999 Raymond Ripp"
Gs "Frame"
if {$Page==""} { return "" }
global VariableDeRetour
global LesFenetresDePAB
global PagePropre
global CurrentGenome
set Nom ""
set Queue [file tail $NomDuFichierOrigine]
set w [NomDe fenetre]
regsub -all {\t} $Page " " PagePropre($w)
if { [info proc EstPABouTROUouTRNAouARN]!="" && [EstPABouTROUouTRNAouARN [file tail $NomDuFichierOrigine]] } {
set Nom $Queue
}
# if {[PourWscope]} { return [Html_DuTexteTelQuel [set PagePropre($w)]] }
lappend LesFenetresDePAB($Queue) $w
if { $NomDuFichierOrigine == "" } {
set NomDuFichierOrigine "Tsointsoin"
}
if {$Maniere=="AutoManiere" || $Maniere==""} {
set Maniere [LaManierePourAffiche $NomDuFichierOrigine]
}
if {$Nom!="" && [NomDeScene $Nom]!=""} {
set Titre "[NomDeScene $Nom] $NomDuFichierOrigine"
} else {
set Titre "$NomDuFichierOrigine"
}
set Header ""
# if { ! [OnTraite "RetGene"]&& [PourWscope]} { return [Html_TextToListbox [set PagePropre($w)] $Titre $Header "" "ResetAndWaitForButtons"] }
set Clavier $w.buttons
if { ! [PourWscope]} {
toplevel $w
wm title $w "$Titre"
wm iconname $w "$Titre"
label $w.msg -wraplength 4i -justify left -text "$Titre"
pack $w.msg -side top
frame $Clavier
pack $Clavier -side bottom -fill x -padx 3m -pady 1m
}
set ForValidateOnly 0
TouchePour $Clavier NouvelleGamme
TouchePour $Clavier NouvelleCouleur "red"
if { [regexp "AvecRetour" $Maniere] } {
if {[regexp "AvecRetourPourInforme" $Maniere]} {
TouchePour $Clavier "Validate" "InformeSansDemanderParWscope $Nom \[selection get\]" "" "green"
} else {
TouchePour $Clavier "Validate sel." "set VariableDeRetour($w) \[selection get\]" "" "green"
TouchePour <2> " /All" "set VariableDeRetour($w) \[set PagePropre($w)\]" ""
TouchePour <3> " / No!" "set VariableDeRetour($w) {}"
}
if {[PourWscope]} { set ForValidateOnly 1 }
TouchePour $Clavier NouvelleCouleur "pink"
}
TouchePour $Clavier "Dismiss" "Dismiss $w"
TouchePour $Clavier "Dismiss_all" "DismissToutCePAB $Queue" "NoWeb"
TouchePour $Clavier NouvelleCouleur "grey"
TouchePour $Clavier "Display sel." "SendToWeb \[selection get\]" "WebOnly"
TouchePour <2> "/Select all" "onclick='return selectAll();'" "WebOnly"
TouchePour $Clavier "Save all" "SaveAs \[set PagePropre($w)\]" "NoWeb"
TouchePour <2> "/sel." "SaveAs \[selection get\]" "NoWeb"
TouchePour <3> " /Edit" "EditAndShow \[set PagePropre($w)\]" "NoWeb"
TouchePour $Clavier "Memorize sel." "MemoSelection $w Memorize" "NoWeb" "lightyellow"
TouchePour <2> "/Recall" "MemoSelection $w Recall" "NoWeb"
TouchePour $Clavier NouvelleCouleur "grey"
TouchePour $Clavier "Print" "ImprimeLeTexte \[set PagePropre($w)\]"
TouchePour <2> "/Sort" "TrieEtAffiche \[set PagePropre($w)\] Alpha $Maniere $NomDuFichierOrigine"
TouchePour <3> "/ask" "TrieEtAffiche \[set PagePropre($w)\] Ask $Maniere $NomDuFichierOrigine"
TouchePour $Clavier "Copy" "clipboard clear ; clipboard append \[selection get\]" "NoWeb"
TouchePour <2> "/Append" "clipboard append \[selection get\]" "NoWeb"
TouchePour <3> " /Font" "PolicePourListBox Ask $w" "NoWeb"
TouchePour $Clavier "Exec" "ExecuteUnBoutonDe $w" "NoWeb"
TouchePour <2> "/Small" "RapetisseLesBoutonsDe $w" "NoWeb"
TouchePour <3> "/Kill" "DetruitUnBoutonDe $w" "NoWeb"
TouchePour $Clavier NouvelleGamme
TouchePour $Clavier NouvelleCouleur "grey"
TouchePour $Clavier NouvelleGamme
TouchePour $Clavier NouvelleCouleur "yellow"
TouchePour $Clavier "Next" "Focalise $w" "NoWeb"
TouchePour <2> "/Top" "Focalise $w top" "NoWeb"
TouchePour <3> "/New" "Focalise $w ask" "NoWeb"
TouchePour $Clavier "Highlight [PreFixe]" "Illumine $Nom $w" "NoWeb"
TouchePour <2> "/Query" "Illumine QUERY $w" "NoWeb"
TouchePour $Clavier "High word" "Illumine \[Entre\] $w" "NoWeb"
TouchePour <2> "/group" "IllumineLeGroupeDe $Nom $w" "NoWeb"
TouchePour <3> "/?" "IllumineLeGroupeDe $Nom $w Ask $Maniere" "NoWeb"
TouchePour $Clavier "Sel. In" "AfficheRognure \[set PagePropre($w)\] \[selection get\] $Maniere $NomDuFichierOrigine In"
TouchePour <2> "/Out" "AfficheRognure \[set PagePropre($w)\] \[selection get\] $Maniere $NomDuFichierOrigine Out"
TouchePour <3> "/Alone" "AfficheRognure \[set PagePropre($w)\] \[selection get\] $Maniere $NomDuFichierOrigine Alone"
if { $Nom!="" } {
TouchePour $Clavier "Informe $Nom" "Informe $Nom"
TouchePour $Clavier "Narcisse" "FaireLire \[Narcisse $Nom\]"
TouchePour <2> "/fetch it" "AfficheFetch \[Narcisse $Nom\]"
TouchePour $Clavier "Ghost it " "Fantomise $Nom ParDecret"
TouchePour <2> "/ask" "Fantomise $Nom Ask"
TouchePour $Clavier "Met it " "MetIt $Nom ParDecret"
TouchePour <2> "/ask" "MetIt $Nom Ask"
TouchePour $Clavier "Reject it " "RejectIt $Nom ParDecret"
TouchePour <2> "/ask" "RejectIt $Nom Ask"
TouchePour <3> "/NoRej" "RejectIt $Nom {NoRejected ParDecret}"
}
TouchePour $Clavier "Search on board ..." "SearchOnBoard \[selection get\]"
if {$Nom==""} { set NomX x } else { set NomX $Nom }
TouchePour $Clavier "NewButton" "NouveauBouton $w New $NomX $NomDuFichierOrigine" "NoWeb"
TouchePour <2> "/same" "NouveauBouton $w Same $NomX $NomDuFichierOrigine" "NoWeb"
TouchePour <3> "/auto" "NouveauBouton $w Auto $NomX $NomDuFichierOrigine" "NoWeb"
if {$ForValidateOnly} { TouchePour $Clavier "RefuseAll" }
TouchePour $Clavier NouvelleGamme
TouchePour $Clavier NouvelleCouleur "grey"
TouchePour $Clavier "Description" "AfficheLesDescriptifs $NomDuFichierOrigine MemeOrdre"
TouchePour <2> "/all" "AfficheLesDescriptifs $NomDuFichierOrigine Natif"
TouchePour <3> "/page" "AfficheLesDescriptifs \[set PagePropre($w)\] MemeOrdre"
TouchePour $Clavier "Classes" "AfficheLesDescriptifs $NomDuFichierOrigine MemeOrdre {} {} {AC OC}"
TouchePour <2> "/all" "AfficheLesDescriptifs $NomDuFichierOrigine Natif {} {} {AC OC}"
TouchePour <3> "/page" "AfficheLesDescriptifs \[set PagePropre($w)\] MemeOrdre {} {} {AC OC}"
TouchePour $Clavier "FragFrom" "FragFrom $Nom"
TouchePour $Clavier "SeeDNA" "SeeADN $NomDuFichierOrigine"
TouchePour <2> "/6PAB" "VoisinADN $Nom"
TouchePour <3> "/6txt" "VoisinADN \[set PagePropre($w)\]"
TouchePour $Clavier "Compare to other" "CompareADN \[set PagePropre($w)\]"
TouchePour $Clavier "Frag" "IsoleUnDomaine $Nom"
TouchePour <2> "/from page" "IsoleUnDomaine \[set PagePropre($w)\]"
TouchePour <3> "/nuc" "IsoleEtAfficheUnDomaineNucleique \[set PagePropre($w)\]"
TouchePour $Clavier "PeptidSort" "AffichePeptideSort $Nom \[set PagePropre($w)\]"
TouchePour <2> "/Enzym" "AffichePeptideSort $Nom \[set PagePropre($w)\] ShowEnzymes"
TouchePour $Clavier "Res Enzym" "CheckRestrictionEnzymes for_$Nom All \[set PagePropre($w)\]"
TouchePour <2> "/Sign" "CheckRestrictionEnzymes for_$Nom Signals \[set PagePropre($w)\]"
TouchePour <3> "/Ask" "CheckRestrictionEnzymes for_$Nom \[Entre NdeI\] \[set PagePropre($w)\]"
TouchePour $Clavier "Res Map $Nom" "RestrictionMap $Nom"
TouchePour <3> "/Page" "RestrictionMap \[set PagePropre($w)\]"
TouchePour $Clavier "Codon usage" "AfficheVariable \[UsageDesCodons $Nom\] AvecRien"
TouchePour <2> "/Rare" "AfficheSlidingCodonRare \[set PagePropre($w)\]"
TouchePour <3> "/CPS" "Cps \[selection get\] {} {} Show"
TouchePour $Clavier "Hydrophibicities" "AfficheVariable \[Hydrophobicities $NomDuFichierOrigine\] AutoManiere"
TouchePour $Clavier "OrthoFamily" "AfficheLesOrthologuesFamiliersDuBlastP $Nom"
TouchePour $Clavier "Cluster X-HDA" "AfficheLeClusterXHda $Nom"
TouchePour <2> "/MSF" "AfficheMsfFamily $Nom"
TouchePour $Clavier NouvelleGamme
if { $Nom!="" && ! [regexp "SansSeeAby" $Maniere]} {
TouchePour $Clavier NouvelleCouleur "green"
set Nicolas "Nicolas"
set Moumou "Ordali"
if {[OnTraiteUnGenome]} { set SecondMSF "Para" }
if {[OnTraiteUneCollection]} { set SecondMSF "MSF2" }
if {[OnTraiteDesCDNAs]} { set SecondMSF "Loc" ; set Moumou "allBN" ; set Nicolas "allBP"}
if {[PreFixe]=="PEROX"} { set SecondMSF "Loc" ; set Moumou "allBN" ; set Nicolas "allBP"}
if {[OnTraiteBalibase]} {
TouchePour $Clavier "Macsim Rsf" "AfficheLeRSF $Nom" "" "cyan"
TouchePour <2> "/Xml" "SeeAby MacsimXml $Nom"
TouchePour <3> "/Html" "HtmlFromXmlMacsim $Nom {} ShowHtml"
}
TouchePour $Clavier "Seq" "SeeAby Seq $NomDuFichierOrigine"
TouchePour <2> " /nuc" "SeeAby Nuc $NomDuFichierOrigine"
TouchePour <3> " /Show" "SeeAby Show $NomDuFichierOrigine"
TouchePour $Clavier "Any" "SeeAby MemoAny $NomDuFichierOrigine"
TouchePour <2> "/choose" "SeeAby ChooseAny $NomDuFichierOrigine"
TouchePour <3> "/all" "SeeAby AllAny $NomDuFichierOrigine"
TouchePour $Clavier "Blast" "SeeAby MemoBlast $NomDuFichierOrigine"
TouchePour <2> "/choose" "SeeAby ChooseBlast $NomDuFichierOrigine"
TouchePour <3> "/all" "SeeAby AllBlast $NomDuFichierOrigine"
TouchePour $Clavier "Msf" "SeeAby MemoMsf $NomDuFichierOrigine"
TouchePour <2> "/choose" "SeeAby ChooseMsf $NomDuFichierOrigine"
TouchePour <3> "/all" "SeeAby AllMsf $NomDuFichierOrigine"
TouchePour $Clavier "Ordali" "Ordali $Nom"
if {[PourWscope]} {
TouchePour $Clavier "Jalview" "JalviewHtml $Nom"
}
if {[file exists "[RepertoireDuGenome]/blastxmultiples"]} {
TouchePour $Clavier "Frameshift BlastX" "AfficheLesBlastXDesHitsMultiples $Nom"
TouchePour <2> "/Loc" "FaireLire \[PossibleFrameshift $Nom\]"
}
if {[file exists "[RepertoireDuGenome]/fiches/Domaines"]} {
TouchePour $Clavier "Show Domains" "IllustreLesDomaines $Nom"
}
TouchePour $Clavier "Files" "SeeAby Other $NomDuFichierOrigine"
TouchePour <2> "/Other" "SeeAby OnList $NomDuFichierOrigine"
TouchePour <3> "/WithDir" "ShowDirectories \[set PagePropre($w)\] $NomDuFichierOrigine"
if {[OnTraiteSpine]} {
TouchePour $Clavier "Xml Spine" "SeeAby SpineXml $NomDuFichierOrigine" "" "Purple"
TouchePour <2> "/Macsim" "SeeAby MacsimXml $NomDuFichierOrigine"
TouchePour <3> "/Html" "HtmlFromXmlMacsim $Nom {} ShowHtml"
}
}
if { [regexp "AvecBlaste" $Maniere] || [regexp "AvecFormate" $Maniere] } {
TouchePour $Clavier NouvelleCouleur "green"
TouchePour $Clavier "Run BlastP" "Blaste P \[set PagePropre($w)\]"
TouchePour <2> "/tN" "Blaste tN \[set PagePropre($w)\]"
TouchePour <3> "/Choose" "Blaste Choix \[set PagePropre($w)\]"
TouchePour $Clavier "GenScan" "RunGenScanEtAffiche \[set PagePropre($w)\]"
TouchePour <2> "/RepMasker" "RunRepeatMaskerEtAffiche \[set PagePropre($w)\]"
TouchePour $Clavier NouvelleCouleur "green"
TouchePour $Clavier "Change format" "AfficheVariable \[FormateSequence \[set PagePropre($w)\]\] AvecFormateAvecBlasteSansFetch [file tail $NomDuFichierOrigine]"
TouchePour <2> "/sel." "AfficheVariable \[FormateSequence \[selection get\]\] AvecFormateAvecBlasteSansFetch part_of_[file tail $NomDuFichierOrigine]"
TouchePour $Clavier "Medline all" "AfficheTousLesMedlinesDeLaSequence \[set PagePropre($w)\]\]"
TouchePour <2> "/sel." "AfficheMedline \[selection get\]"
}
if { [regexp "AvecAligneurs" $Maniere] } {
TouchePour $Clavier "DbCl +Anchors" "RunDbClustal \[selection get\] $NomDuFichierOrigine"
TouchePour <2> " / -" "RunDbClustal \[selection get\]"
TouchePour $Clavier "Tfas of selection" "CreeUnTFAs \[selection get\] ShowIt"
TouchePour $Clavier "BlastBase sel" "CreeUneBanqueBlast \[selection get\] [file tail $NomDuFichierOrigine]"
TouchePour <2> "/all" "CreeUneBanqueBlastDuBlast $NomDuFichierOrigine"
TouchePour <3> "/+q" "CreeUneBanqueBlastDuBlast $NomDuFichierOrigine AvecQuery"
}
if { [regexp "AvecShow" $Maniere] } {
TouchePour $Clavier "Show" "AfficheLesFichiers \[selection get\] AutoManiereAvecShow"
TouchePour <2> "/File" "AfficheLesFichiers \[selection get\] AutoManiereAvecShow"
TouchePour <3> "/Split" "OffreLesMots \[selection get\]"
}
if { [regexp "AvecEtudeMSF" $Maniere] } {
TouchePour $Clavier NouvelleGamme
TouchePour $Clavier NouvelleCouleur "lightblue"
TouchePour $Clavier "Msfcolor" "DessineMoiUnMSF \[set PagePropre($w)\] $NomDuFichierOrigine Ask"
TouchePour <2> " /Xml" "Ordali $Nom ForceXml"
TouchePour <3> " /RSF" "AfficheLeRSF $NomDuFichierOrigine"
TouchePour $Clavier "ClustalX" "ClustalX \[set PagePropre($w)\] $NomDuFichierOrigine"
TouchePour <2> " /NJPlot" "NJPlotMSF \[set PagePropre($w)\] $NomDuFichierOrigine"
TouchePour <3> " /ATV" "ATV $NomDuFichierOrigine EnExec"
TouchePour $Clavier "NorMD" "FaireLire \"memorized NorMD \[MDScore $NomDuFichierOrigine\]\""
TouchePour <2> "/Comput" "FaireLire \"just computed NorMD \[MDScore \[set PagePropre($w)\] IsText\]\""
TouchePour <3> "/2Word" "MSF2WordML $NomDuFichierOrigine"
TouchePour $Clavier "StartStop" "TestCodonStartEtDeletionDuMSF $NomDuFichierOrigine"
TouchePour <2> " /Sort" "AfficheReordonneMSF \[set PagePropre($w)\] Ask $NomDuFichierOrigine"
TouchePour $Clavier "Ordali" "Ordali $Nom [RepertoireDuGenome]/macsimXml/$Nom.xml {} {} ForceXml"
TouchePour <2> " /disp" "OrdaliDuTexteMSF \[set PagePropre($w)\] $NomDuFichierOrigine -viewer"
TouchePour <3> " /sel." "OrdaliDeLaSelection \[set PagePropre($w)\] \[selection get\] $NomDuFichierOrigine"
TouchePour $Clavier "MSF familiar orgs" "AfficheMsfOfFamiliarOrganisms $NomDuFichierOrigine"
TouchePour $Clavier "MSF Reduce" "AfficheReduceMsf $NomDuFichierOrigine"
TouchePour <2> "/Dist" "AfficheSortedDistances $NomDuFichierOrigine"
TouchePour <3> "MsfInOut" "AfficheMsfInOut $Nom"
if {[PreFixe]=="TFIIH"} {
TouchePour $Clavier "Pid2a2" "Pid2a2 $Nom $NomDuFichierOrigine"
}
}
if { [regexp "AvecGenoret" $Maniere] } {
TouchePour $Clavier NouvelleGamme
TouchePour $Clavier NouvelleCouleur "ForestGreen"
TouchePour $Clavier "Show All Uploads" "ShowUploads"
if {[regexp "AvecAllUploads" $Maniere]} {
TouchePour $Clavier "Show sel. Upload" "ShowUpload \[selection get\]"
}
if {[regexp "AvecUpload" $Maniere]} {
TouchePour $Clavier " SetGUs of sel." "SetGUsWithUpload $NomDuFichierOrigine"
}
TouchePour $Clavier "ShowGUs" "ShowGUs"
if {[regexp "AvecGUsList" $Maniere]} {
TouchePour <2> "/RemGUs" "RemGUs \[selection get\]"
}
}
if { [regexp "AvecXbgs" $Maniere] } {
TouchePour $Clavier NouvelleGamme
TouchePour $Clavier NouvelleCouleur "Magenta"
TouchePour $Clavier "Spine" "SpineSummary Show"
TouchePour $Clavier "XML File" "CreateSpineXML"
TouchePour <2> "/Show" "CreateSpineXML Show"
TouchePour <3> "/sel" "CreateSpineXML \[selection get\] Show"
TouchePour $Clavier "Search Organisms" "OrganismeDesXGSs"
TouchePour $Clavier "Show SpineOnly" "AfficheLesSpines \[set PagePropre($w)\]"
TouchePour <2> " /No" "AfficheLesSpines \[set PagePropre($w)\] KO"
TouchePour $Clavier "Change Owner" "MemeOwner \[selection get\]"
TouchePour <2> "/XGS" "XGSPourOwner \[selection get\]"
TouchePour $Clavier "Def" "AfficheSpineDefinitions"
TouchePour <2> " /Stat" "HistoDesSpineTasks AllToGether Show"
TouchePour <3> " /SpOk" "HistoDesSpineTasks SpineOnly Show"
}
if { [regexp "AvecLog" $Maniere] } {
TouchePour $Clavier "Log" "AfficheLogDuMSF $NomDuFichierOrigine"
}
if { [regexp "AvecAide" $Maniere] } {
TouchePourClavier $Clavier "?" "AideEnLigne \[selection get\]" "" "blue"
}
if { [regexp "AvecSmallMSF" $Maniere] } {
TouchePour $Clavier "Small align" "ShowDifferentielBlastAlignement \[selection get\]" "" "green"
}
if { [regexp "AvecProfileSegments" $Maniere] } {
TouchePour $Clavier NouvelleGamme
TouchePour $Clavier NouvelleCouleur "green"
TouchePour $Clavier "ProfilSeg align" "AfficheProfileSegment \[selection get\] $Maniere $NomDuFichierOrigine"
}
if { [regexp "AvecSegAlignement" $Maniere] } {
TouchePour $Clavier NouvelleGamme
TouchePour $Clavier NouvelleCouleur "lightblue"
TouchePour $Clavier "Blast segment align" "AfficheLesAliEnPage \[set PagePropre($w)\] \[selection get\] $NomDuFichierOrigine"
TouchePour $Clavier "Mosaic" "IllustreLeBlast $NomDuFichierOrigine"
TouchePour <2> "/Map" "AfficheMapping $NomDuFichierOrigine \[selection get\]"
TouchePour <3> "/DrawBlast" "DrawBlast $NomDuFichierOrigine"
TouchePour $Clavier "Localise 0.001" "AfficheChaqueSegmentDuBlastN $Nom $NomDuFichierOrigine"
TouchePour <2> "/sel." "AfficheChaqueSegmentDuBlastN $Nom $NomDuFichierOrigine \[selection get\]"
TouchePour $Clavier "Chromos" "IllustreLesChromosomes"
TouchePour <2> "/Histo" "ChoixHistogramme"
TouchePour $Clavier "HitsPN" "LesBandelettesDuBlast $NomDuFichierOrigine {} {} OnGraphe"
TouchePour <2> "/SeqSizes" "TailleDesSequencesAAligner $Nom"
TouchePour <3> "/ all>" "LesEntetesChevronneesDuBlast \[set PagePropre($w)\] Show $NomDuFichierOrigine"
TouchePour $Clavier "Sel Bandes" "LesElusDuBlastPParBandelettes $NomDuFichierOrigine {} Show"
TouchePour <2> "/Mounir" "LesElusDuBlastPParMounir $NomDuFichierOrigine {} Show"
TouchePour <3> "/AuChoix" "LesElusDuBlastPParAuChoix $NomDuFichierOrigine {} Show"
TouchePour $Clavier "Ballast" "AfficheBallastDuBlastP $NomDuFichierOrigine $Nom"
TouchePour $Clavier "Rsf" "AfficheLesSortiesDuBallast $NomDuFichierOrigine rsf"
TouchePour <2> "/lmsp" "AfficheLesSortiesDuBallast $NomDuFichierOrigine lmsp"
TouchePour <3> "/pssm" "AfficheLesSortiesDuBallast $NomDuFichierOrigine pssm"
TouchePour $Clavier "TopSeq" "AfficheLesSortiesDuBallast $NomDuFichierOrigine topseq"
TouchePour <2> "/Tabl" "AfficheLesSortiesDuBallast $NomDuFichierOrigine table"
TouchePour <3> "/Anch" "AfficheLesSortiesDuBallast $NomDuFichierOrigine anchors"
if {[regexp -nocase "psiblast" $NomDuFichierOrigine]} {
TouchePour $Clavier "SplitPsiBlast" "ShowLesBlastsDuPsiBlast $NomDuFichierOrigine" "lightgreen"
TouchePour <2> "/first" "ShowLesBlastsDuPsiBlast $NomDuFichierOrigine 1"
TouchePour <3> "/last" "ShowLesBlastsDuPsiBlast $NomDuFichierOrigine end"
}
regsub {\.blast[pn]?$} $NomDuFichierOrigine "" NomDuFasta
append NomDuFasta ".fasta"
if {[file exists $NomDuFasta]} {
TouchePour $Clavier "Show fasta" "AfficheVariable \[ContenuDuFichier $NomDuFasta\]" "blue"
}
}
if { [regexp "AvecOpCom" $Maniere] } {
TouchePour $Clavier NouvelleGamme
TouchePour $Clavier NouvelleCouleur "pink"
TouchePour $Clavier "Operon ORFs" "ORFsDesOperonsCommuns \[selection get\] ORFsOfOperon"
}
if { ! [regexp "SansFetch" $Maniere]} {
TouchePour $Clavier NouvelleGamme
TouchePour $Clavier NouvelleCouleur "orange"
set FichierAussi ""
if {[OnTraiteUneCollection]} { set FichierAussi "$NomDuFichierOrigine" }
if {[OnTraiteDesCDNAs]} { set FichierAussi "OnVeutNucEMBL" }
TouchePour $Clavier "Fetch" "AfficheFetch \[selection get\] $FichierAussi"
TouchePour <2> " /nature" "AfficheFetch \[selection get\] OnVeutNature"
TouchePour <3> "/seq" "AfficheFetch \[selection get\] $NomDuFichierOrigine"
TouchePour $Clavier "Split in words" "OffreLesMots \[selection get\]"
TouchePour $Clavier "Contig" "AfficheContigComplet \[selection get\]"
TouchePour <2> "/GenScan" "AfficheGenscanDuContig \[selection get\]"
TouchePour $Clavier "Kegg" "IllustreLesPathwayDeLaBoite $Nom"
TouchePour <2> "/Dev" "IllustreDevStage \[list $Nom\] 3 [Fiches]/SelectedEST"
TouchePour <3> "/Tissue" "IllustreTissueType \[list $Nom\] {} 3 \[Fiches\]/SelectedEST"
TouchePour $Clavier "Gene Identity Card" "GeneIdentityCard $Nom"
TouchePour $Clavier NouvelleCouleur "cyan"
if {[regexp "Tparva" [RepertoireDuGenome]]} {
TouchePour $Clavier "BlastP Sc" "ShowBlastFromSelection \[selection get\] blastpScReciproc"
TouchePour <2> "/Yeast" "YEAHshowYeast \[selection get\]"
TouchePour <3> " /Info" "Reciproc $Nom ShowInfo"
TouchePour $Clavier "BlastP Eh" "ShowBlastFromSelection \[selection get\] blastpEhistolica"
TouchePour <2> "/ Pf" "ShowBlastFromSelection \[selection get\] blastpPfalciparumReciproc"
TouchePour <3> "/ Tb" "ShowBlastFromSelection \[selection get\] blastpTbruceiReciproc"
}
}
if { [regexp "AvecRecap" $Maniere]} {
TouchePour $Clavier NouvelleGamme
TouchePour $Clavier NouvelleCouleur "ForestGreen"
TouchePour $Clavier "Blast" "SeeAby MemoBlast \[selection get\]"
TouchePour <2> "/choose" "SeeAby ChooseBlast \[selection get\]"
TouchePour <3> "/all" "SeeAby AllBlast \[selection get\]"
TouchePour $Clavier "BlastP" "SeeAby blastp \[selection get\]"
TouchePour <2> "/RefseqP" "SeeAby blastprefseq-prot \[selection get\]"
TouchePour $Clavier "Blastn wgs" "SeeAby blastnwgs \[selection get\]"
TouchePour $Clavier "TBlastN wgs" "SeeAby tblastnwgs \[selection get\]"
TouchePour <2> "/Genomes" "SeeAby tblastncompletegenomes \[selection get\]"
}
if {[OnTraiteDesClones]} {
TouchePour $Clavier "My Oligos" "IllustreLesPrimers $Nom" "" "Magenta"
TouchePour <2> "/vPPCR" "ShowLesVirtualPPCRsDuPGS $Nom"
TouchePour <3> "/VEs" "ShowLesVEDidierDuPGS $Nom"
if {1} {
TouchePour $Clavier "vPpcr " "ShowVirtualPPCR \[selection get\]" "" "Magenta"
TouchePour <2> "/choose" "ShowVirtualPPCR \[selection get\] Choose"
TouchePour <3> "/all" "ShowVirtualPPCR \[selection get\] All"
TouchePour $Clavier "Rec1 of vPPCR" "ShowLesRec1DuVirtualPPCR \[selection get \]" "" "Magenta"
TouchePour $Clavier "Rec1 or 2 or fusion " "ShowCorrespondingFile \[selection get\]" "" "Magenta"
TouchePour $Clavier "ShowVEDidier" "VEDidier \[selection get\] Show" "" "Magenta"
}
}
if { ! [regexp "SansFetch" $Maniere] && \
[OnTraiteUneCollection] && ! [OnTraiteDesCDNAs] && \
[file tail $NomDuFichierOrigine]!=$Nom} {
TouchePour $Clavier "Co-Fetch" "AfficheAssocie $NomDuFichierOrigine copains"
TouchePour <2> "/BlastP" "AfficheAssocie $NomDuFichierOrigine coblastp"
TouchePour <3> "/MSF" "AfficheAssocie $NomDuFichierOrigine coclustalw"
TouchePour $Clavier "Co-Info" "AfficheAssocie $NomDuFichierOrigine coinfos"
TouchePour <2> "/tBlastN" "AfficheAssocie $NomDuFichierOrigine cotblastn"
TouchePour $Clavier "Co-modify" "InformeLeCopain $NomDuFichierOrigine"
TouchePour $Clavier "Co-rsf" "AfficheLesSortiesDuBallast $NomDuFichierOrigine rsf"
TouchePour <2> "/lmsp" "AfficheLesSortiesDuBallast $NomDuFichierOrigine lmsp"
TouchePour <3> "/pssm" "AfficheLesSortiesDuBallast $NomDuFichierOrigine pssm"
}
if {[OnTraiteDesClones]} {
TouchePour $Clavier NouvelleGamme
TouchePour $Clavier NouvelleCouleur "magenta"
if {[regexp "AvecOli" $Maniere]} {
TouchePour $Clavier "Oligo " "ShowOli \[selection get\]"
TouchePour <2> "/choose" "ShowOli \[selection get\] Choose"
TouchePour <3> "/all" "ShowOli \[selection get\] All"
TouchePour $Clavier "ShowBlastN" "ShowBlastOfOligo \[selection get\]"
TouchePour <2> "/Order" "AfficheFournisseur \[selection get\]"
}
if {[regexp "AvecShowItsOligos" $Maniere]} {
set NA ""
if {[regexp "AvecShowItsOligos_NA" $Maniere]} { set NA "_NA" }
TouchePour $Clavier "Show its oligos" "ShowItsOligos \[selection get\] $NA"
}
if {[regexp "AvecFiOl" $Maniere]} {
TouchePour $Clavier "ShowOligosFiles" "ShowOligosFiles \[selection get\]"
}
if {[regexp "AvecVirtualPPCR" $Maniere]} {
TouchePour $Clavier "vPpcr " "ShowVirtualPPCR \[selection get\]"
TouchePour <2> "/choose" "ShowVirtualPPCR \[selection get\] Choose"
TouchePour <3> "/all" "ShowVirtualPPCR \[selection get\] All"
TouchePour $Clavier "Rec1 of vPPCR" "ShowLesRec1DuVirtualPPCR \[selection get \]"
}
if {[regexp "AvecShowItsPPCR" $Maniere]} {
set NA ""
if {[regexp "AvecShowItsPPCR_NA" $Maniere]} { set NA "_NA" }
TouchePour $Clavier "Show its PPCR" "ShowItsPPCR \[selection get\] $NA"
}
if {[regexp "AvecTriFragments" $Maniere]} {
TouchePour $Clavier "SortFragments all" "TriFragments \[set PagePropre($w)\] Ask"
TouchePour <2> "/sel." "TriFragments \[selection get\] Ask"
}
}
if {[regexp "AvecTaxNCBI" $Maniere]} {
TouchePour $Clavier NouvelleGamme
TouchePour $Clavier NouvelleCouleur "lightgreen"
TouchePour $Clavier "BrowseTaxNCBI" "BrowseTaxNCBI"
TouchePour $Clavier "Sel. Parent" "BrowseTaxNCBI \[selection get\] Parent"
TouchePour <2> "/Children" "BrowseTaxNCBI \[selection get\] Children"
TouchePour <3> "/?" "BrowseTaxNCBI \[selection get\]"
TouchePour $Clavier "All Parent" "BrowseTaxNCBI \[set PagePropre($w)\] Parent"
TouchePour <2> "/Children" "BrowseTaxNCBI \[set PagePropre($w)\] Children"
TouchePour <3> "/?" "BrowseTaxNCBI \[set PagePropre($w)\]"
}
if {$ForValidateOnly} { TouchePour $Clavier "ReAcceptAll" }
set Largeur 80
set Hauteur 35
if { [regexp "GrandeLargeur" $Maniere] } { set Largeur 128 }
if { [regexp {SetWidth([0-9]+)} $Maniere Match Width] } { set Largeur $Width }
if { [regexp {SetHeight([0-9]+)} $Maniere Match Height] } { set Hauteur $Height }
if { ! [PourWscope]} {
frame $w.frame -borderwidth 10
pack $w.frame -side top -expand yes -fill both
scrollbar $w.frame.yscroll -command "$w.frame.list yview"
scrollbar $w.frame.xscroll -command "$w.frame.list xview" \
-orient horizontal
listbox $w.frame.list -width $Largeur -height $Hauteur -setgrid 1 \
-yscroll "$w.frame.yscroll set" \
-xscroll "$w.frame.xscroll set" \
-selectmode extended \
-background "LightGrey" \
-foreground "Black" \
-selectbackground "LightYellow" \
-selectforeground "Black" \
-font [list Courier [PolicePourListBox]]
bind $w.frame.list "<4>" "%W yview scroll 1 units"
bind $w.frame.list "<5>" "%W yview scroll -1 units"
bind $w.frame.list "" "%W xview scroll 1 units"
bind $w.frame.list "" "%W xview scroll -1 units"
grid $w.frame.list -row 0 -column 0 -rowspan 1 -columnspan 1 -sticky nsew
grid $w.frame.yscroll -row 0 -column 1 -rowspan 1 -columnspan 1 -sticky nsew
grid $w.frame.xscroll -row 1 -column 0 -rowspan 1 -columnspan 1 -sticky nsew
grid rowconfig $w.frame 0 -weight 1 -minsize 0
grid columnconfig $w.frame 0 -weight 1 -minsize 0
set nLignes 0
foreach Ligne [split [set PagePropre($w)] "\n"] {
incr nLignes
if { [regexp "AvecSegAlignement" $Maniere] && [regexp {^>[\./a-zA-Z]} $Ligne] \
&& ! [regexp "AvecTout" $Maniere]} { break }
$w.frame.list insert end $Ligne
}
}
if {[PourWscope]} {
set R [Html_TextToListbox [set PagePropre($w)] $w $Titre $Header "" $Maniere]
if { [regexp "AvecRetour" $Maniere] } {
return $R
global VariableDeRetour
package require Tk
tkwait variable VariableDeRetour($w)
set v $VariableDeRetour($w)
LogWscope "apres tkwait de $Var valeur $v"
unset VariableDeRetour($w)
# catch {destroy $w}
return $v
}
return $R
}
if {$nLignes<30} { $w.frame.list configure -height [expr $nLignes+3] }
if {[regexp "AvecEtude" $Maniere] && $Nom!=""} {
Illumine $Nom $w
}
bind $w.frame.list <3> "DecrisLaLigne %W %x %y"
bind $w.frame.list "DecrisLaLigne %W %x %y Efface"
if {[regexp "AvecRetour" $Maniere]} {
$w.frame.list configure -background "green"
}
if { [regexp "AvecRetourMaisSansWait" $Maniere] } {
return $w
}
if { [regexp "AvecRetour" $Maniere] } {
tkwait variable VariableDeRetour($w)
set v $VariableDeRetour($w)
unset VariableDeRetour($w)
catch {destroy $w}
return $v
} else {
return $w
}
}
proc QueFaitOn {} {
global env
return "[set env(GSCOPEDIR)] [set env(REPERTOIREDUGENOME)]"
}
proc Destroy w {
global KanvaCourant
destroy $w
return
}
proc GCGtoTFA {TexteGCG {Entete ""}} {
return [SequenceFormatTFA $Texte "Entete" "gcg"]
}
proc AfficheMsfInOut Nom {
global RepertoireDuGenome
set Fichier "$RepertoireDuGenome/msfinout/$Nom"
if { ! [file exists $Fichier]} { return "" }
set Fen [AfficheFichier $Fichier]
return [Illumine "accepted" $Fen]
}
proc OteSuperfluPourFetch Ligne {
set Ligne [string trim $Ligne]
regsub {^[0-9]+ +} $Ligne "" Ligne
regsub {^>} $Ligne " " Ligne
regsub -all ";" $Ligne " " Ligne
regsub {.*\. \:} $Ligne " " Ligne
regsub -nocase "chromosome" $Ligne "" Ligne
regsub -nocase " contig " $Ligne ":" Ligne
return $Ligne
}
proc Gag {} {
Gs "WindowText"
# Cette procedure retourne la page du labo
return [ContenuDuFichier "./logag.html"]
}
proc MessAide {{V ""}} {
set M "$V.messaide"
catch {destroy $M}
message $M \
-text [lindex [$V.baide configure -text] 4] \
-borderwidth 3 -font {Courier 8} -relief raise -width 250\
-background "lightyellow" -foreground "black"
place $V.messaide -x 10 -y 300 -anchor nw
after 1000 "catch {destroy $M}"
}
proc KanvaCourant {} {
global KanvaCourant
global CurrentGenome
if {[info exists KanvaCourant]} { return $KanvaCourant }
set KanvaCourant [GscopeBoard $CurrentGenome]
return $KanvaCourant
}
proc Long {A B I J} {
if {$I==0 ||$J==0} { return 0 }
set X [string index $A $I]
set Y [string index $B $J]
if {$X==$Y} { set R 1 } else { set R 0 }
set M [Maxi [expr [Long $A $B [expr $I-1] [expr $J-1]]+$R] \
[Maxi [Long $A $B [expr $I-1] $J] [Long $A $B $I [expr $J-1]]] ]
return $M
}
proc TestLong {} {
set A "abcefdyeyf"
set B "abcdxcef"
puts [expr [Long $A $B [expr [string length $A]-1] [expr [string length $B]-1]]+1]
exit
}
proc TestQuidSeq {} {
set LesACOS [QuestionDeScience QuidSeq "QuidOSsOfACs P12345|P12345 "]
regsub {[ \n]+$} $LesACOS "" LesACOS
Espionne $LesACOS
exit
}
proc DemarcationDesTRNAs {K VouH} {
global RepertoireDuGenome
foreach Ligne [LesLignesDuFichier "$RepertoireDuGenome/fiches/bornesdestrnas"] {
scan $Ligne "%s %d %d %s" TRNA Debut Fin Orient
set Milieu [expr ($Debut+$Fin)/2]
set Milieux($TRNA,Moi) $Milieu
}
FaireLire "Please browse for the file bornesdestrnas of the other organism"
set FichierLui [ButineArborescence "All" "$RepertoireDuGenome/"]
set SonFichierADN "[file dirname $FichierLui]/../beton/adn"
set LongueurLui [expr [string length [ContenuDuFichier $SonFichierADN]]-1]
foreach Ligne [LesLignesDuFichier $FichierLui] {
scan $Ligne "%s %d %d %s" TRNA Debut Fin Orient
set Milieu [expr $LongueurLui - ($Debut+$Fin)/2]
set Milieux($TRNA,Lui) $Milieu
if {[info exists Milieux($TRNA,Moi)]} {
set XY($TRNA) "[set Milieux($TRNA,Moi)] $Milieu"
}
}
foreach {TRNA ValXY} [array get XY] {
scan $ValXY "%d %d" X Y
DemarcationEnPosition $K "vh" "SurADN_$X" "SurADN_$Y" $TRNA
}
return
}
proc AfficheNuc Boite {
set Nom [Box $Boite nom]
if { $Nom=="" } { return "" }
set Debut [Box $Boite debut]
set Fin [Box $Boite fin]
set Orient [Box $Boite orient]
set SeqNuc [BoutADN $Debut $Fin $Orient]
set NucTFA [SequenceFormatTFA $SeqNuc "$Nom $Debut $Fin $Orient" "nucbrut"]
return [AfficheVariable $NucTFA "AvecBlasteAvecFormateAvecVoisinsSansFetch" $Nom]
}
proc AccessDuPlusProcheDansDisphy {Nom OrgaCherche} {
global RepertoireDuGenome
foreach Ligne [LesLignesDuFichier "$RepertoireDuGenome/disphy/$Nom"] {
scan $Ligne "%s %d %s" Orga Distance Access
if {$Orga == $OrgaCherche} { return $Access }
}
return ""
}
proc AfficheBallastDuBlastP {FichierBlastP Nom} {
set TexteBallast [Ballast $FichierBlastP [RepertoireDeTravail] "" "TexteSansFichier"]
return [AfficheVariable $TexteBallast \
"AvecGrapheAvecSegAlignementAvecAligneurs" $Nom]
}
proc TrouveLaReferenceVoulue {ReferenceVoulue FichierPhylo} {
Wup "Texte est un arbre phylo"
Wup "Recherche l'Access qui correspond a l'organisme ReferenceVoulue"
Wup " Ne marche bien que pour les synthetases... et encore ... j'ai tout change."
set Texte [ContenuDuFichier $FichierPhylo]
regsub -all {\(|\)|\:|\n} $Texte " " Texte
foreach Mot [split $Texte " "] {
if { ! [regexp -nocase {[A-Z]} $Mot]} { continue }
if {0 && [regexp -indices {[0-9]} $Mot sChiffre]} {
scan $sChiffre "%d" iChiffre
puts "$sChiffre $iChiffre"
puts $Mot
set Mot "[string range $Mot 0 [incr iChiffre -1]]_[string range $Mot [incr iChiffre] end]"
puts $Mot
}
lappend LesMots $Mot
}
puts [join $LesMots " "]
foreach Access $LesMots {
if {[regexp $ReferenceVoulue [OrgaDuAccess $Access Court]]} { return $Access }
}
exit
set LesReferencesPossibles {}
if { [lsearch -regexp $LesMots $ReferenceVoulue] < 0 } {
FaireLire "You have to tell me which organism I take as reference for [AutreCode $Nom]"
set Reference [ChoixParmi $LesMots]
} else {
while {[set iReference [lsearch -regexp $LesMots $ReferenceVoulue]] > -1} {
lappend LesReferencesPossibles [lindex $LesMots $iReference]
set LesMots [lrange $LesMots [expr $iReference+1] end]
}
if {[llength $LesReferencesPossibles] == 2 && [AutreCode $Nom]=="glu"} {
set iReference [lsearch -regexp $LesReferencesPossibles "sye"]
if {$iReference > -1} {
set Reference [lindex $LesReferencesPossibles $iReference]
} else {
FaireLire "You have to tell me which organism I take as reference for [AutreCode $Nom]"
set Reference [ChoixParmi $LesReferencesPossibles]
}
} elseif {[llength $LesReferencesPossibles] == 2 && [AutreCode $Nom]=="gln"} {
set iReference [lsearch -regexp $LesReferencesPossibles "syq"]
if {$iReference > -1} {
set Reference [lindex $LesReferencesPossibles $iReference]
} else {
FaireLire "You have to tell me which organism I take as reference for [AutreCode $Nom]"
set Reference [ChoixParmi $LesReferencesPossibles]
}
} elseif {[llength $LesReferencesPossibles] > 1} {
FaireLire "You have to tell me which organism I take as reference for [AutreCode $Nom]"
set Reference [ChoixParmi $LesReferencesPossibles]
} else {
set Reference [lindex $LesReferencesPossibles 0]
}
}
}
proc PhyloRankDuTamis {{Tam ""}} {
global NotreOrga
CreeLaTableDuTamis $Tam "distancesphylo" "$NotreOrga" ".$NotreOrga"
}
proc PhyloRank {{OrgaDeReference ""} {Extension ""}} {
global RepertoireDuGenome
global NotreOS
if {$OrgaDeReference==""} {
FaireLire "Please give me the reference organism\n (to whom the distances will be calculate)."
set Orga [Glossaire [Entre $NotreOS] Court]
} else {
set Orga [Glossaire $OrgaDeReference Court]
}
if {$Orga==""} { return "" }
if {$Extension==""} {
set Extension ".$Orga"
}
set FichierPIClustalw "$RepertoireDuGenome/fiches/piclustalw$Extension"
Wup "Je pose la question maintenant, pour plus tard ..."
set QuestionDejaPoseeEtOui 0
if {[file exists $FichierPIClustalw] && [OuiOuNon "Do I replace $FichierPIClustalw" 0] \
|| ! [file exists $FichierPIClustalw]} {
set QuestionDejaPoseeEtOui 1
}
set FichierDistancesPhylo "$RepertoireDuGenome/fiches/distancesphylo$Extension"
if { ! [file exists $FichierDistancesPhylo] || \
! [OuiOuNon "The file distancesphylo already exists. Do I use it ?"]} {
set FichierDistancesPhylo [CreeDistancesPhyloAvecLesMSFs $Orga $Extension]
}
if { ! [file exists $FichierDistancesPhylo]} {
FaireLire "Sorry, $FichierDistancesPhylo does'nt exist."
}
if {$QuestionDejaPoseeEtOui || ! [file exists $FichierPIClustalw]} {
CreeLesFichiersPIClustalwEtPSClustalw $Orga $Extension
}
CreeLesTables "distancesphylo" $Orga $Extension
}
proc AfficheSequencesCorrelees {Fichier {Groupe ""}} {
global RepertoireDuGenome
JeMeSignale
set Nom [file tail $Fichier]
set Fichier "$RepertoireDuGenome/correlator/$Nom"
if { ! [file exists $Fichier]} { return "" }
set VasY 0
set DejaVu 0
set LesBons {}
foreach Ligne [LesLignesDuFichier $Fichier] {
Espionne $Ligne
if { ! [regexp -nocase {[a-z]} $Ligne]} { continue }
if {$Groupe!=""} {
if {[regexp "groupe :" $Ligne]} {
scan $Ligne "%s %s %d" Bidon DP GroupeLu
if {$GroupeLu == $Groupe} {
set VasY 1
set DejaVu 1
continue
} else {
if {$DejaVu} { break }
}
}
if { ! $VasY } { continue }
}
regsub "^>" $Ligne "" Ligne
lappend LesBons $Ligne
}
return [AfficheVariable [join $LesBons "\n"] ""]
}
proc CodonStartPossible Codon {
global CodonStartPossible
global RepertoireDuGenome
Wup "Return 1 if Codon is a valid start codon"
if { ! [info exists CodonStartPossible]} {
set Fichier "$RepertoireDuGenome/fiches/codonstartpossible"
while { ! [file exists $Fichier]} {
if {[OuiOuNon "For Possible Start Codon ... \nThe file $Fichier does'nt exists.\nDo you want to create it ?"]} {
set Possibles [string trim [Entre "ATG TTG GTG"]]
while {[regexp " " $Possibles]} { regsub " " $Possibles " " Possibles }
if {$Possibles == ""} { continue }
regsub -all " " $Possibles "\n" Possibles
Sauve $Possibles dans $Fichier
} else {
if {[OuiOuNon "Do I exit ? "]} { exit }
if {[OuiOuNon "Do I continue without creating $Fichier ? "]} { return {} }
}
}
foreach Ligne [LesLignesDuFichier $Fichier] {
lappend CodonStartPossible $Ligne
}
}
if {$Codon=="LaListeMerci"} { return $CodonStartPossible }
foreach Possible $CodonStartPossible {
if { ! [string compare -nocase $Possible $Codon]} { return 1 }
}
return 0
}
proc CodonStopPossible Codon {
global CodonStopPossible
global RepertoireDuGenome
Wup "Return 1 if Codon is a valid stop codon"
if { ! [info exists CodonStopPossible]} {
set Fichier "$RepertoireDuGenome/fiches/codonstoppossible"
while { ! [file exists $Fichier]} {
if {[OuiOuNon "For Possible Stop Codon ... \nThe file $Fichier does'nt exists.\nDo you want to create it ?"]} {
set Possibles [string trim [Entre "TAA TAG TGA"]]
while {[regexp " " $Possibles]} { regsub " " $Possibles " " Possibles }
if {$Possibles == ""} { continue }
regsub -all " " $Possibles "\n" Possibles
Sauve $Possibles dans $Fichier
} else {
if {[OuiOuNon "Do I exit ? "]} { exit }
if {[OuiOuNon "Do I continue without creating $Fichier ? "]} { return {} }
}
}
foreach Ligne [LesLignesDuFichier $Fichier] {
lappend CodonStopPossible $Ligne
}
}
if {$Codon=="LaListeMerci"} { return $CodonStopPossible }
foreach Possible $CodonStopPossible {
if { ! [string compare -nocase $Possible $Codon]} { return 1 }
}
return 0
}
proc AfficheMedline Selection {
Wup "Calls Jean-Marie Wurtz's program to fetch medline's http file."
foreach Ligne [split $Selection "\n"] {
catch {unset Uid}
if {[regexp "^RX" $Ligne]} {
catch {set Uid [IntegerApres "MEDLINE;" dans $Ligne]}
} elseif {[regexp "PMID:" $Ligne]} {
catch {set Uid [IntegerApres "PMID:" dans $Ligne]}
} else {
continue
}
if { ! [info exists Uid] || ! [regexp {^[0-9]+$} $Uid] } { continue }
AfficheVariable [exec medhttp $Uid] "AvecRien"
}
}
proc AfficheTousLesMedlinesDeLaSequence Sequence {
Wup "Calls Jean-Marie Wurtz's program to fetch medline's http file."
Gs "Frame"
set LesLignes [split $Sequence "\n"]
if {[llength $LesLignes] < 1} {
FaireLire "$Sequence\nis n't a sequence."
return ""
}
set iAccess [lsearch -regexp $LesLignes {^AC}]
if {$iAccess<0} {
FaireLire "Sorry I can't find the Access of the sequence"
return ""
}
scan [lindex $LesLignes $iAccess] "%s %s" AC Access
regsub ";" $Access "" Access
return [AfficheVariable [exec meddata $Access] "AvecRien"]
}
proc Gscope {{V ""} {Top ""}} {
global RepertoireDuGenome
global FichierMiniConfig
global FichierMiniConfigSansGenome
global GscopeAideSurLesBoutons
global VersionDeGscopeAuBigBang
VersionDeGscope
if { ! [info exists RepertoireDuGenome]} {RepertoireDuGenome}
if { ! [info exists CurrentGenome]} {CurrentGenome}
if { ! [info exists RepertoireDeTravail]} {RepertoireDeTravail}
CommandesExecPossibles
if {[info exists GscopeAideSurLesBoutons] && $GscopeAideSurLesBoutons} {
bind Button "+TuMontrerasCeQueFaitLeBouton %W"
bind Button "+LacheLeBouton %W"
}
while {! [info exists VersionDeGscopeAuBigBang]} {
if {[info exists FichierMiniConfig] && [file exists $FichierMiniConfig]} {
ChargeMiniConfig
continue
} else {
Glossaire hsap Court
lappend LePrelude "It seems you want to create a new Gscope Project."
lappend LePrelude "Gscope can manage different kinds of projects :"
lappend LePrelude " - a complete genome, starting with the DNA, creating the proteome"
lappend LePrelude " - a collection of proteins, genes, cDNAs, or any type of sequences, etc. "
lappend LePrelude ""
lappend LePrelude "Gscope can manage proteins, nucleic sequences or BOTH :"
lappend LePrelude " Gscope will ask you some questions about that."
lappend LePrelude ""
lappend LePrelude "Gscope starts reading you original data :"
lappend LePrelude " it can be "
lappend LePrelude " - a fasta file containing the genome"
lappend LePrelude " - a fasta file containing all your sequences"
lappend LePrelude " - a file with AccessNumbers"
lappend LePrelude " - a file of filenames linking to your sequencess"
lappend LePrelude " - a genbank file"
lappend LePrelude " - etc."
lappend LePrelude ""
lappend LePrelude "It's very important to provide all important information concerning your sequences"
lappend LePrelude " when you start the project. Gscope integrates easily organism name, genename,"
lappend LePrelude " gene description, etc., if it is available in your files."
lappend LePrelude " For example if your fasta files are as follow"
lappend LePrelude ">Genename Organism Definition"
lappend LePrelude ">AaEcR-A Aedes aegypti Ecdysone receptor isoforme-A"
lappend LePrelude " or your file of filenames"
lappend LePrelude "AaEcr-A /home/yourdir/seq/Ecdy.tfa"
lappend LePrelude ""
lappend LePrelude " Good luck ! (for any question phone to Raymond : 03 88 65 33 05)"
set Prelude [join $LePrelude "\n"]
FaireLire $Prelude
if {[OuiOuNon "Do you have a genomic dna sequence ?"]} {
CreeLaBase
} elseif {[OuiOuNon "Is it a collection of proteins, genes, dna sequences, mRNAs, etc. ?"]} {
CreeLaCollection
} else {
if {[OuiOuNon "Do I start with \n$FichierMiniConfigSansGenome\n\n[ContenuDuFichier $FichierMiniConfigSansGenome]"]} {
set FichierMiniConfig $FichierMiniConfigSansGenome
continue
} else {
if {[OuiOuNon "Do we try later ... ?"]} { exit }
}
}
}
}
LesOrganismesTresProches
if {$V=="NoVitrine"} { return }
return [Vitrine $V $Top]
}
proc CurrentGenome {} {
global RepertoireDuGenome
global CurrentGenome
Gs "Text"
if { [info exists CurrentGenome]} { return $CurrentGenome }
if {[regexp {^aby$} $RepertoireDuGenome]} { set CurrentGenome "Emilie" }
if {[regexp {^bys$} $RepertoireDuGenome]} { set CurrentGenome "Seraphin" }
if {[regexp {casimir$} $RepertoireDuGenome]} { set CurrentGenome "Casimir" }
if {[regexp {hor} $RepertoireDuGenome]} { set CurrentGenome "Horikoshii" }
if {[regexp {fur} $RepertoireDuGenome]} { set CurrentGenome "Furiosus" }
if { ! [info exists CurrentGenome]} { set CurrentGenome [file tail $RepertoireDuGenome] }
return $CurrentGenome
}
proc Vitrine {{V ""} {Top ""}} {
global VitrineCourante
global RepertoireDuGenome
global CurrentGenome
global FichierGscopeHelp
global FichierGscopeImage
global FichierGscopeImage2
global FichierGscopeLogoBInG
global FichierGscopeLogoMacsim
global FichierGscopeExitGscope
global NotreOS Org1 Org2
global LesBoutonsNonOpen
global LesBoutonsDeVitrine
global LesBoutonsDeVitrineCaches
if {$V=="GetVitrine" && [info exists VitrineCourante]} { return $VitrineCourante }
if {$Top!=""} { toplevel $V }
set Bouton $V.bseqin
lappend LesBoutons $Bouton
lappend LesWebDeny $Bouton
button $Bouton -text "Enter sequence/Show a file/ Edit"
bind $Bouton <1> {AfficheVariable [SeqIn] "SansFetchAvecFormateAvecBlasteAvecAligneurs"}
bind $Bouton <2> ShowFile
bind $Bouton <3> EditeEtCreeFichier
set Bouton $V.bvisu
lappend LesBoutons $Bouton
lappend LesWebDeny $Bouton
button $Bouton -text "See Seq/Blast/MSF"
bind $Bouton <1> AfficheUneSequence
bind $Bouton <2> BlastTools
bind $Bouton <3> EtudieUneSortieMSF
bind $Bouton AfficheUneSortieBlast
set Bouton $V.bcochealigneurs
lappend LesBoutonsDeVitrineCaches $Bouton
lappend LesWebDeny $Bouton
button $Bouton -text "Choose multiple alignment program ..."
bind $Bouton CocheAligneurs
set Bouton $V.borgas
lappend LesBoutons $Bouton
lappend LesWebDeny $Bouton
button $Bouton -text "Ontology/GOTools/Decrypthon"
bind $Bouton <1> "GOPanel \[NomDe gopanel\]"
bind $Bouton <2> "GOTools"
bind $Bouton <3> "AfficheDecrypthon"
set Bouton $V.devtissue
lappend LesBoutons $Bouton
lappend LesWebDeny $Bouton
button $Bouton -text "Develop Stage/Tissue Type/ Taxo"
bind $Bouton <1> "IllustreDevStage"
bind $Bouton <2> "IllustreTissueType"
bind $Bouton <3> "BrowseTaxNCBI"
set Bouton $V.bmenage
lappend LesBoutonsDeVitrineCaches $Bouton
lappend LesWebDeny $Bouton
button $Bouton -text "Clean directory"
bind $Bouton <1> {MenageLesTmp "Rename"}
set Bouton $V.inventaire
lappend LesBoutons $Bouton
lappend LesWebDeny $Bouton
button $Bouton -text "Inventory/Check /DbW"
bind $Bouton <1> Inventaire
bind $Bouton <2> CheckInventaire
bind $Bouton <3> QuoiQuOnFait
if {[PreFixe]=="HNR"} {
set Bouton $V.orgatblastn
lappend LesBoutons $Bouton
lappend LesWebDeny $Bouton
button $Bouton -text "OrgaInBlastP genomes/wgs"
bind $Bouton <1> "GenomiqueComparativeParBlast tblastncompletegenomes"
bind $Bouton <2> "GenomiqueComparativeParBlast tblastnwgs"
set Bouton $V.orgablastn
lappend LesBoutons $Bouton
lappend LesWebDeny $Bouton
button $Bouton -text "OrgaInBlastN wgs"
bind $Bouton <1> "GenomiqueComparativeParBlast blastnwgs"
set Bouton $V.orgatblastp
lappend LesBoutons $Bouton
lappend LesWebDeny $Bouton
button $Bouton -text "OrgaInBlastP protall/ refseq"
bind $Bouton <1> "GenomiqueComparativeParBlast blastp"
bind $Bouton <2> "GenomiqueComparativeParBlast blastprefseq-prot"
}
if {[regexp "YEAH" [RepertoireDuGenome]]} {
set Bouton $V.yeah
lappend LesBoutons $Bouton
lappend LesWebDeny $Bouton
button $Bouton -text "YEAH Show / Find / What"
bind $Bouton <1> YEAHshow
bind $Bouton <2> YEAHfind
bind $Bouton <3> YEAHshowYeast
set Bouton $V.yeah2
lappend LesBoutons $Bouton
lappend LesWebDeny $Bouton
button $Bouton -text "YEAH mouvement 340 319"
bind $Bouton <1> YEAHmouvement
}
if {[regexp "Tparva" [RepertoireDuGenome]]} {
set Bouton $V.genoComp
lappend LesBoutons $Bouton
lappend LesWebDeny $Bouton
button $Bouton -text "ComparativeGenomic Tb/Pf/Eh"
bind $Bouton <1> YesScNoTb
bind $Bouton <2> YesScNoPf
bind $Bouton <3> YesScNoEh
set Bouton $V.genoCount
lappend LesBoutons $Bouton
lappend LesWebDeny $Bouton
button $Bouton -text "ComparativeGenomic Counts/Combi"
bind $Bouton <1> "PhyloDistribution {} {} Show"
bind $Bouton <2> "PhyloDistribution ChooseCombi Name Show"
}
if {[OnTraite "MTM1"]} {
set Bouton $V.clonage
lappend LesBoutons $Bouton
lappend LesWebDeny $Bouton
button $Bouton -text "MTM1"
bind $Bouton <1> "MTM1 show"
bind $Bouton <2> "MTM1 show"
bind $Bouton <3> "MTM1 show"
}
if {[OnTraiteDesClones]} {
set Bouton $V.clonage
lappend LesBoutons $Bouton
lappend LesWebDeny $Bouton
button $Bouton -text "Cloning /Show/ Order"
bind $Bouton <1> InventaireDeLaDatabaseClonage
bind $Bouton <2> InventaireDeLaDatabaseClonage
bind $Bouton <3> GestionDesClones
}
if {0} {
set Bouton $V.genoret
lappend LesBoutons $Bouton
lappend LesWebDeny $Bouton
button $Bouton -text "Genoret GUs /ShowUploads"
bind $Bouton <1> ShowGUs
bind $Bouton <2> ShowUploads
}
if {[OnTraite "Bathy2010"]} {
set Bouton $V.assemblybbtools
lappend LesBoutons $Bouton
lappend LesWebDeny $Bouton
button $Bouton -text "AssemblyDbTools Bathymodiolus"
bind $Bouton <1> "AssemblyDbTools Bathymodiolus"
}
set Bouton $V.baide
lappend LesBoutons $Bouton
button $Bouton -text "ShowOrf/ChangeGenome/Exit\nDissmiss all windows"
bind $Bouton <1> {SeeAby Show [Entre [PreFixe]]}
bind $Bouton <2> ChangeGenome
bind $Bouton <3> Boum
bind $Bouton "DismissToutesLesFenetres"
if { ! [info exists AvecTintin]} { set AvecTintin 1 }
if { ! [PourWscope] && $AvecTintin} {
image create photo periscope -file $FichierGscopeImage
image create photo periscope2 -file $FichierGscopeImage2
$Bouton configure -image periscope
bind $Bouton "$Bouton configure -image periscope2"
bind $Bouton "$Bouton configure -image periscope"
}
set Bouton $V.bgscope
lappend LesBoutons $Bouton
button $Bouton -text "View Linear/Circular/List of $CurrentGenome"
bind $Bouton <1> "GscopeBoard $CurrentGenome"
bind $Bouton <2> "RscopeBoard $CurrentGenome"
bind $Bouton <3> "SeeAby Show \[ChoixParmi \[PresentationDesPABs\]\]"
set Bouton $V.bmap
if {[MapCliquable "Existe"]} {
lappend LesBoutons $Bouton
} else {
lappend LesBoutonsDeVitrineCaches $Bouton
}
lappend LesWebDeny $Bouton
button $Bouton -text "Clicable Map of $CurrentGenome"
bind $Bouton <1> MapCliquable
set Bouton $V.bblaali
set FichierDiffBlaAli "$RepertoireDuGenome/fiches/diffblaali"
if {[file exists $FichierDiffBlaAli]} {
lappend LesBoutons $Bouton
} else {
lappend LesBoutonsDeVitrineCaches $Bouton
lappend LesWebDeny $Bouton
}
button $Bouton -text "BlastP vs DbClust / ClustOperon"
bind $Bouton <1> "AfficheVariable \[ContenuDuFichier $FichierDiffBlaAli\] AvecSmallMSF"
bind $Bouton <2> "AfficheOperonsCommunsAuxClusters"
set Bouton $V.bvisupepcurrentgenome
lappend LesBoutonsDeVitrineCaches $Bouton
button $Bouton -text "List prot/nuc of $CurrentGenome"
bind $Bouton <1> {EtudieLesProteinesDe $CurrentGenome}
bind $Bouton <2> {EtudieLesNucleiquesDe $CurrentGenome}
if {[OnTraiteUnGenome]} {
set Bouton $V.bdotplot
lappend LesBoutons $Bouton
button $Bouton -text "Proteome DotPlot vs ... "
bind $Bouton <1> {eval DotPlot [Entre "genomes Ask Proches"]}
set Bouton $V.bblastn
lappend LesBoutons $Bouton
lappend LesWebDeny $Bouton
button $Bouton -text "BlastN of another Complete Genome"
bind $Bouton <1> BlastNDUnOrgaComplet
set Bouton $V.bTGCA
lappend LesBoutonsDeVitrineCaches $Bouton
lappend LesWebDeny $Bouton
button $Bouton -text "Show Two Gene Cluster Analysis ... "
bind $Bouton <1> RosaceDesTwoGenesCluster
}
if {[OnTraiteUnGenome] || [PreFixe]=="ANN"} {
set Bouton $V.brangphylo
lappend LesBoutons $Bouton
button $Bouton -text "Phylogenic rank Show/New/Tamis"
bind $Bouton <1> DemandeEtDessineOrgaEtSesPlaces
bind $Bouton <2> PhyloRank
bind $Bouton <3> PhyloRankDuTamis
}
set Bouton $V.bDHA
lappend LesBoutons $Bouton
lappend LesWebDeny $Bouton
button $Bouton -text "X-HDA Show/Ask/New"
#Jean a rajoute
#bind $Bouton <1> "ShowHDACroises {}"
bind $Bouton <1> "AfficheBilanXHda"
bind $Bouton <2> "ShowHDACroises AskForFile"
bind $Bouton <3> "NewHDACroises"
set Bouton $V.bSetup
lappend LesBoutons $Bouton
lappend LesBoutonsNonOpen $Bouton
lappend LesWebDeny $Bouton
button $Bouton -text "SetupGscope/setenv / Bird"
bind $Bouton <1> SetupGscope
bind $Bouton <2> AfficheLEnvironnementDeGscope
bind $Bouton <3> BirdGscopeSearch
set Bouton $V.bbigbang
lappend LesBoutons $Bouton
lappend LesBoutonsNonOpen $Bouton
lappend LesWebDeny $Bouton
button $Bouton -text "Complete database/Start/Stop"
bind $Bouton <1> CreeLaBaseOuLaCollection
bind $Bouton <2> JeCommenceABosser
bind $Bouton <3> TuArretesDeBosser
set Bouton $V.environnement
lappend LesBoutons $Bouton
lappend LesBoutonsNonOpen $Bouton
lappend LesWebDeny $Bouton
button $Bouton -text "Gscope Sources / .tar / .exe"
bind $Bouton <1> AfficheLesSourcesDeGscope
bind $Bouton <2> TarDeGscope
bind $Bouton <3> FreewrapGscope
set Bouton $V.blittlebrother
lappend LesBoutons $Bouton
lappend LesBoutonsNonOpen $Bouton
lappend LesWebDeny $Bouton
button $Bouton -text "Gscope chez le Psy"
bind $Bouton <1> AfficheLesProcs
bind $Bouton <2> AfficheLesSourcesDeGscope
bind $Bouton <3> AfficheLEnvironnementDeGscope
set Bouton $V.bbigbrother
lappend LesBoutons $Bouton
lappend LesBoutonsNonOpen $Bouton
lappend LesWebDeny $Bouton
button $Bouton -text "Big Brother /Source/again"
bind $Bouton <1> DemandeEtExecute
bind $Bouton <2> ReSource
bind $Bouton <3> "ReSource Precedent"
set Bouton $V.bboum
lappend LesBoutons $Bouton
button $Bouton -text "Exit Gscope \!"
bind $Bouton <1> Boum
bind $Bouton <2> "CodeSecret 0"
bind $Bouton <3> "CodeSecret 1"
if { ! [PourWscope] && $AvecTintin} {
image create photo LogoBInG -file $FichierGscopeLogoBInG
image create photo ExitGscope -file $FichierGscopeExitGscope
$Bouton configure -image LogoBInG
bind $Bouton "CodeSecret Enter ; $Bouton configure -image ExitGscope"
bind $Bouton "CodeSecret Leave ; $Bouton configure -image LogoBInG"
}
set nB [llength $LesBoutons]
set iB $nB
foreach b $LesBoutons {
if {[PourWscope] && [lsearch -exact $LesWebDeny $b]>-1 } {
if {[catch {destroy $b} Message]} { Espionne $Message }
continue
}
if { ! [GscopeIsOpen] && [lsearch -exact $LesBoutonsNonOpen $b]>-1 } {
continue
}
lappend LesBoutonsDeVitrine $b
$b configure -background [Nuance [expr [incr iB -1]/(1.*$nB)]]
$b configure -foreground black
pack $b -fill both
if { ! [PourWscope]} {
bind $b "if \[OuiOuNon \"Destroy this button ?\"\] { destroy $b }"
}
}
foreach b $LesBoutonsDeVitrineCaches {
$b configure -background "#654321"
$b configure -foreground "#123456"
}
if {[OnTraiteDesClones]} {
$V.clonage configure -background "magenta"
}
if { $V=="" } {
set V .
}
wm title $V "Gscope [VersionDeGscope] $CurrentGenome"
return $V
}
proc DetruireLeBoard w {
Wup "Kills and erase the board from the currentlist"
global KanvaCourant
global LesKanvasOuverts
after 200 destroy $w
set K $w.canvas
set i [lsearch $LesKanvasOuverts $K]
if {$i < 0} { return }
set LesKanvasOuverts [lreplace LesKanvasOuverts $i $i]
if {[info exists KanvaCourant] && $KanvaCourant==$K} {
unset KanvaCourant
if {[llength $LesKanvasOuverts] > 0} {
set KanvaCourant [lindex $LesKanvasOuverts end]
}
}
return
}
proc CommandesExecPossibles {} {
global Commandes CommandesDefaut
set Commandes(integral) "batch-integral.tclsh "
set Commandes(dbclustal) "batch-dbclustal.tclsh "
array set CommandesDefaut [array get Commandes]
}
proc OnColorieLesFrames {{X ""}} {
global OnColorieLesFrames
if { ! [info exists OnColorieLesFrames]} { set OnColorieLesFrames 0 }
if {$X==""} {
return $OnColorieLesFrames
} else {
return [set OnColorieLesFrames $X]
}
}
proc ChoixColoration {} {
set LesColor [ColorationsPossibles]
set LesTradu [LaTraduction [ColorationsPossibles]]
set LesRangs [ColorationsPossibles "" "OnVeutLesRangs"]
foreach Rang $LesRangs {
set iCoul [expr 0.1*int($Rang)]
set CouleurDuTexte [Nuance $iCoul 0. 0.6]
lappend LesCouleursDuTexte $CouleurDuTexte
}
return [ChoixParmiJoli $LesColor $LesCouleursDuTexte $LesTradu]
}
proc ColorationsPossibles {{SansTamis ""} {QueVeutOn ""}} {
global LesColorationsPossibles LesColorationsPossiblesRangs
set OnVeutLesRangs [string equal $QueVeutOn "OnVeutLesRangs"]
if { ! $OnVeutLesRangs && [info exists LesColorationsPossibles]} {
return $LesColorationsPossibles
}
if { $OnVeutLesRangs && [info exists LesColorationsPossiblesRangs]} {
return $LesColorationsPossiblesRangs
}
foreach Ligne [split [info body CouleurParTypeEtNom] "\n"] {
if {[PourWscope] && [regexp "\#.* noWeb" $Ligne]} { continue }
if { ! [regexp {\"Coloration_[^\$][^\"]+} $Ligne CoCo]} { continue }
set Rang 9.9
if {[regexp "\#" $Ligne]} { set Rang [FloatApres "\#" dans $Ligne] }
if {$SansTamis!="" && [regexp "FromTamis" $Ligne]} { continue }
regsub {\"Coloration_} $CoCo "" Coloration
lappend LesRangCol "$Rang $Coloration"
}
set LesRangCol [lsort -command CompareLesFloatsEnDebut $LesRangCol]
foreach RangCol $LesRangCol {
scan $RangCol "%f %s" Rang Col
lappend LesColorationsPossibles $Col
lappend LesColorationsPossiblesRangs $Rang
}
if {$OnVeutLesRangs} {
return $LesColorationsPossiblesRangs
} else {
return $LesColorationsPossibles
}
}
proc BindLaRosace R {
$R bind "Zone" <1> "GereLesZoneEtiquettee $R %x %y arc Point"
$R bind "Zone" "GereLesZoneEtiquettee $R %x %y arc Motion"
$R bind "Zone" "GereLesZoneEtiquettee $R %x %y arc Relache"
$R bind "Zone" <2> "GereLesZoneEtiquettee $R %x %y arc Erase"
$R bind "Zone" <3> "GereLesZoneEtiquettee $R %x %y arc ModifCouleur"
$R bind "Zone" "GereLesZoneEtiquettee $R %x %y arc ModifTaille"
$R bind "Zone" "GereLesZoneEtiquettee $R %x %y arc ModifSens"
$R bind "Fleche" <1> "GereLesZoneEtiquettee $R %x %y line Point"
$R bind "Fleche" "GereLesZoneEtiquettee $R %x %y line Motion"
$R bind "Fleche" "GereLesZoneEtiquettee $R %x %y line Relache"
$R bind "Fleche" <2> "GereLesZoneEtiquettee $R %x %y line Erase"
$R bind "Fleche" <3> "GereLesZoneEtiquettee $R %x %y line ModifCouleur"
$R bind "Fleche" "GereLesZoneEtiquettee $R %x %y line ModifTaille"
$R bind "Fleche" "GereLesZoneEtiquettee $R %x %y line ModifSens"
$R bind "Etiquette" <1> "GereLesZoneEtiquettee $R %x %y text Point"
$R bind "Etiquette" "GereLesZoneEtiquettee $R %x %y text Motion"
$R bind "Etiquette" "GereLesZoneEtiquettee $R %x %y text Relache"
$R bind "Etiquette" <2> "GereLesZoneEtiquettee $R %x %y text Erase"
$R bind "Etiquette" <3> "GereLesZoneEtiquettee $R %x %y text ModifCouleur"
$R bind "Etiquette" "GereLesZoneEtiquettee $R %x %y text ModifTaille"
$R bind "Etiquette" "GereLesZoneEtiquettee $R %x %y text ModifTexte"
$R bind "TexteRosace" <1> "GereLesZoneEtiquettee $R %x %y text Point"
$R bind "TexteRosace" "GereLesZoneEtiquettee $R %x %y text Motion"
$R bind "TexteRosace" "GereLesZoneEtiquettee $R %x %y text Relache"
$R bind "TexteRosace" <2> "GereLesZoneEtiquettee $R %x %y text Erase"
$R bind "TexteRosace" <3> "GereLesZoneEtiquettee $R %x %y text ModifCouleur"
$R bind "TexteRosace" "GereLesZoneEtiquettee $R %x %y text ModifTaille"
$R bind "TexteRosace" "GereLesZoneEtiquettee $R %x %y text ModifTexte"
}
proc FlecheSurArc {R Id {Orientation "F"}} {
Wup "Puts an arrow at the end of the arc Id (clock-wize if Forward ...)"
set PI 3.14159
set DeltaAnglePourFlecheDeg 1.5
set DeltaAnglePourFlecheRad [expr $DeltaAnglePourFlecheDeg*$PI/180.]
scan [$R coords $Id] "%f %f %f %f" G H D B
set Rayon [expr ($D-$G)/2]
set InRayon [expr $Rayon*(1-0.9*$DeltaAnglePourFlecheRad)]
set OutRayon [expr $Rayon*(1+0.9*$DeltaAnglePourFlecheRad)]
set Start [$R itemcget $Id -start]
set Extent [$R itemcget $Id -extent]
set Couleur [$R itemcget $Id -outline]
Espionne "$Start $Extent"
if {$Extent>0} {
set NewExtent [expr $Extent-$DeltaAnglePourFlecheDeg]
if {$Orientation=="F"} {
set NewStart [expr $Start+$DeltaAnglePourFlecheDeg]
set Pointe $Start
set Queue $NewStart
} else {
set NewStart $Start
set Queue [expr $Start+$NewExtent]
set Pointe [expr $Start+$Extent]
}
} else {
set NewExtent [expr $Extent+$DeltaAnglePourFlecheDeg]
if {$Orientation=="F"} {
set NewStart $Start
set Queue [expr $Start+$NewExtent]
set Pointe [expr $Start+$Extent]
} else {
set NewStart [expr $Start+$DeltaAnglePourFlecheDeg]
set Pointe $Start
set Queue $NewStart
}
}
set Queue [expr $Queue*$PI/180]
set Pointe [expr $Pointe*$PI/180]
$R itemconfigure $Id -start $NewStart -extent $NewExtent
set InQueueX [expr ($G+$D)/2 + $InRayon*cos($Queue)]
set InQueueY [expr ($H+$B)/2 - $InRayon*sin($Queue)]
set OutQueueX [expr ($G+$D)/2 + $OutRayon*cos($Queue)]
set OutQueueY [expr ($H+$B)/2 - $OutRayon*sin($Queue)]
set PointeX [expr ($G+$D)/2 + $Rayon*cos($Pointe)]
set PointeY [expr ($H+$B)/2 - $Rayon*sin($Pointe)]
$R create polygon \
$PointeX $PointeY \
$InQueueX $InQueueY \
$OutQueueX $OutQueueY \
$PointeX $PointeY \
-fill $Couleur -outline $Couleur -tags "Fleche"
}
proc CouleurExquiseDeLaZone {Etiquette {VraieCouleur ""}} {
Wup "Returns the color of the dotplot zone"
Wup " appending the name of the label if not VraieCouleur"
global RepertoireDuGenome
global LaPaletteDesCouleursDeZoneEtiquettee
if { ! [info exists LaPaletteDesCouleursDeZoneEtiquettee]} {
foreach Ligne [LesLignesDuFichier "$RepertoireDuGenome/fiches/palettezoneetiquette"] {
scan $Ligne "%s %s" Couleur E
set LaCouleur($E) "$Couleur"
}
}
set PremiereLettre [string range $Etiquette 0 0]
if {$VraieCouleur==""} {
return [set LaCouleur($PremiereLettre)]_$Etiquette
} else {
return [set LaCouleur($PremiereLettre)]
}
}
proc ArcLaListe {ListeNomCouleur R Type {MilieuOuAngle "milieu"} {RayonMinimum ""} {RayonMaximum ""}} {
Wup "Creates the arcs associated to each element of the list"
global ParametresDuBoard
Wup "Pour les fleches a l'envers c'est code 'Reverse\NomOuAngle' "
set PI 3.14159
set DeltaAnglePourFlecheDeg 1.5
set DeltaAnglePourFlecheRad [expr $DeltaAnglePourFlecheDeg*$PI/180.]
set CentreX [set ParametresDuBoard($R,CentreX)]
set CentreY [set ParametresDuBoard($R,CentreY)]
set RayonMoyen [set ParametresDuBoard($R,RayonMoyen)]
set OffsetRayonMin [set ParametresDuBoard($R,OffsetRayonMin)]
set OffsetRayonMax [set ParametresDuBoard($R,OffsetRayonMax)]
set IemeCouche [set ParametresDuBoard($R,IemeCouche)]
set Rayon $RayonMinimum
set Gauche [expr $CentreX-$Rayon]
set Haut [expr $CentreY-$Rayon]
set Droite [expr $CentreX+$Rayon]
set Bas [expr $CentreY+$Rayon]
set InRayon [expr $Rayon*(1-0.9*$DeltaAnglePourFlecheRad)]
set OutRayon [expr $Rayon*(1+0.9*$DeltaAnglePourFlecheRad)]
set n [llength $ListeNomCouleur]
set CumulF 0
set CumulR 0
set OldCouleur "CACADOIE"
foreach {NomOuAngle Couleur} [concat $ListeNomCouleur [list "NomBidon" "CouleurPourFin"]] {
if {[regexp {^Reverse_} $NomOuAngle]} {
set Orientation "R"
incr CumulR
} else {
set Orientation "F"
incr CumulF
}
regsub {^Reverse_} $NomOuAngle "" NomOuAngle
set Etiquette " "
if {$Couleur != $OldCouleur && $OldCouleur != "CACADOIE"} {
if {$OldCouleur=="VIDE"} { set NonVide 0 } else { set NonVide 1 }
set i_ [string first "_" $OldCouleur]
if {$i_ < 0} {
set VraieCouleur $OldCouleur
} else {
set Etiquette [string range $OldCouleur [incr i_ 1] end]
set VraieCouleur [string range $OldCouleur 0 [incr i_ -2]]
}
if {$CumulF>=$CumulR} {
set Orientation "F"
set NewStart [expr $Start+$DeltaAnglePourFlecheRad]
set Queue $NewStart
set Pointe $Start
} else {
set Orientation "R"
set NewStart $Start
set Pointe [expr $Start+$Extent]
set Queue [expr $Pointe-$DeltaAnglePourFlecheRad]
}
set NewExtent [expr $Extent-$DeltaAnglePourFlecheRad]
set Repeche 0
if {$Etiquette=="B" && [expr abs($Extent) < 2*$PI*5000./[LongueurADN]]} {
set Repeche 1
}
set Noye 0
if {$Etiquette=="D5" && [expr abs($Extent) < 2*$PI*30000./[LongueurADN]]} {
set Noye 1
}
Espionne "$Etiquette [expr $Extent*[LongueurADN]/(2*$PI)] $Repeche $Noye"
if {$Repeche || (! $Noye && $NonVide && [expr abs($Extent) > 2*$PI*19000./[LongueurADN]])} {
set IdArc [$R create arc $Gauche $Haut $Droite $Bas -width 7 \
-start [expr $NewStart*180/$PI] -extent [expr $NewExtent*180/$PI] \
-style "arc" -outline $VraieCouleur -tags "Zone"]
set InQueueX [expr ($Gauche+$Droite)/2 + $InRayon*cos($Queue)]
set InQueueY [expr ($Haut+$Bas)/2 - $InRayon*sin($Queue)]
set OutQueueX [expr ($Gauche+$Droite)/2 + $OutRayon*cos($Queue)]
set OutQueueY [expr ($Haut+$Bas)/2 - $OutRayon*sin($Queue)]
set PointeX [expr ($Gauche+$Droite)/2 + $Rayon*cos($Pointe)]
set PointeY [expr ($Haut+$Bas)/2 - $Rayon*sin($Pointe)]
if { 0 } {
$R create polygon \
$PointeX $PointeY \
$InQueueX $InQueueY \
$OutQueueX $OutQueueY \
$PointeX $PointeY \
-fill $VraieCouleur -outline $VraieCouleur -tags "Fleche"
} else {
FlecheSurArc $R $IdArc $Orientation
}
set EtiqX [expr ($Gauche+$Droite)/2 + 1.00*$OutRayon*cos($Start+$Extent/2)]
set EtiqY [expr ($Haut+$Bas)/2 - 1.00*$OutRayon*sin($Start+$Extent/2)]
$R create text $EtiqX $EtiqY -text $Etiquette \
-anchor c \
-font {Courier 10} \
-tags "Etiquette"
}
unset Start
set CumulF 0
set CumulR 0
}
if {$Couleur == "CouleurPourFin"} { break }
if {$MilieuOuAngle == "angle"} {
set Angle $NomOuAngle
} elseif {$MilieuOuAngle == "milieu"} {
set Angle [AngleDansRosace $R $Nom]
}
if { ! [info exist Start]} { set Start $Angle }
set Extent [EntreMinEtMax [expr $Angle-$Start] [expr -$PI] $PI]
set OldCouleur $Couleur
}
}
proc Plotte {Nous Vous NosPos VosPos {MinX ""} {MaxX ""} {MinY ""} {MaxY ""} {Orga ""} {PourGif ""}} {
Wup "Creates the dotplot with the lists"
global DotPlotDesProches
global ScrollRectangleOriginal
global IdScrollRectangle
global LesDotPlotCourants
global ParametresDuDotPlot
global PlottePourBlastN
global LesOrdresPourGif
Gs "Canvas"
set Titre "Dotplot of [NotreOS] versus $Orga"
if {$PourGif!="" || $MinX=="PourGif"} {
set PourGif 1
} else {
set PourGif 0
}
if {$PourGif} {
set Canvas NeRienFaire
set Bind NeRienFaire
set Pack NeRienFaire
set Fram NeRienFaire
set Button NeRienFaire
set Scrollbar NeRienFaire
set Grid NeRienFaire
set FonctionRejetteLaBoite "RejetteLaBoite"
set LesOrdresPourGif {}
set w "PourGif"
set K "OrdrePourGif"
} else {
set Canvas canvas
set Bind bind
set Pack pack
set Fram frame
set Button button
set Scrollbar scrollbar
set Grid grid
set FonctionRejetteLaBoite "NeRejettePasLaBoite"
set w [NomDe dotplot]
catch {destroy $w}
toplevel $w
wm title $w "$Titre"
wm iconname $w "$Titre"
set K $w.canvas
}
set xOld 0
set yOld 0
set CentreWindow 5
set LargeurWindow [expr 2*$CentreWindow+1]
set LesPentes {}
set LesXaNoter {}
set Premiere 0
set PenteLisseeCourante 0
set NosSuivants $NosPos
set VosSuivants $VosPos
foreach x $NosPos y $VosPos {
set NosSuivants [lrange $NosSuivants 1 end]
set VosSuivants [lrange $VosSuivants 1 end]
if { ! [info exists DansLaColonne($x)]} { set DansLaColonne($x) 0 }
incr DansLaColonne($x)
set PenteLissee($x) $PenteLisseeCourante
if {$DotPlotDesProches} {
set Pente 0
if { 0 } {
if {[expr abs($y-$yOld) < 10*abs($x-$xOld)]} {
set Proches($x,$y) 1
set Proches($xOld,$yOld) 1
}
} else {
foreach xs $NosSuivants ys $VosSuivants {
if {$xs==$x} { continue }
set DX [expr abs($x-$xs)]
set DY [expr abs($y-$ys)]
if { $DX > 5000 } { break }
if { [expr abs($DX-$DY)] < 500 } {
set Proches($x,$y) 1
set Proches($xs,$ys) 1
break
}
}
}
if {[info exists Proches($x,$y)]} {
if {[expr ($y-$yOld)*($x-$xOld) == 0]} {
set Pente 0
} else {
set Pente [expr (($y-$yOld)*($x-$xOld))/abs(($y-$yOld)*($x-$xOld))]
}
}
set xOld $x
set yOld $y
if {[llength $LesPentes] > 0} { set Premiere [lindex $LesPentes 0] }
if {[llength $LesXaNoter] == $CentreWindow} {
set LesPentes [lreplace $LesPentes 0 0]
}
if {[llength $LesPentes] == $LargeurWindow} {
set LesPentes [lreplace $LesPentes 0 0]
set PenteLisseeCourante [expr $PenteLisseeCourante - $Premiere]
}
lappend LesPentes $Pente
lappend LesXaNoter $x
set PenteLisseeCourante [expr $PenteLisseeCourante + $Pente]
set PenteLissee([lindex $LesXaNoter 0]) $PenteLisseeCourante
}
}
if { $MinX == "" } {
set MinX 99999999
set MaxX -99999999
set MinY 99999999
set MaxY -99999999
foreach x $NosPos y $VosPos {
set MinX [Mini $MinX $x]
set MaxX [Maxi $MaxX $x]
set MinY [Mini $MinY $y]
set MaxY [Maxi $MaxY $y]
}
}
set MinXY [Mini $MinX $MinY]
set MaxXY [Maxi $MaxX $MaxY]
set LargeurMaxi [expr ($MaxX)]
set HauteurMaxi [expr ($MaxY)]
set LargeurVoulue [expr (512*$MaxX)/$MaxXY]
set HauteurVoulue [expr (512*$MaxY)/$MaxXY]
set CanvaScroMinX 0
set CanvaScroMinY 0
set CanvaScroMaxX $LargeurMaxi
set CanvaScroMaxY $HauteurMaxi
set ScroHor $w.hscroll
set ScroVer $w.vscroll
set KShSv $w.grid
set Boutons $w.buttons
$Fram $Boutons
$Pack $Boutons -side bottom -fill x -pady 2m
$Button $Boutons.dismiss -text "Dismiss" -background "red" -command "DetruireLeDotPlot $w"
$Pack $Boutons.dismiss -side left -expand 1
$Button $Boutons.postscript -text "Zoom/UnZoom/Reset\nGif/Postscript/Print" -background "yellow"
$Bind $Boutons.postscript <1> "Gonfle $w all gonfle gonfle"
$Bind $Boutons.postscript <2> "Gonfle $w all degonfle degonfle"
$Bind $Boutons.postscript <3> "Gonfle $w all reset reset"
$Bind $Boutons.postscript "CanvaEnPNG $K"
$Bind $Boutons.postscript "CanvaEnPostscript $K Visible AskF"
$Bind $Boutons.postscript "CanvaEnImpression $K"
$Pack $Boutons.postscript -side left -expand 1
$Button $Boutons.manuel -text "Line manual v/vh/h\nLines in file v/vh/h\nLines from TRNAs"
$Bind $Boutons.manuel <1> "DemarcationEnPosition $K v"
$Bind $Boutons.manuel <2> "DemarcationEnPosition $K vh"
$Bind $Boutons.manuel <3> "DemarcationEnPosition $K h"
$Bind $Boutons.manuel "DemarcationEnPositionDansFichier $K v"
$Bind $Boutons.manuel "DemarcationEnPositionDansFichier $K vh"
$Bind $Boutons.manuel "DemarcationEnPositionDansFichier $K h"
$Bind $Boutons.manuel "DemarcationDesTRNAs $K v"
$Bind $Boutons.manuel "DemarcationDesTRNAs $K vh"
$Bind $Boutons.manuel "DemarcationDesTRNAs $K h"
$Pack $Boutons.manuel -side left -expand 1
$Button $Boutons.saverest -text "Save/Replace/Append\nvertical lines"
$Bind $Boutons.saverest <1> "SauveLaDemarcation $K"
$Bind $Boutons.saverest <2> "RestaureUneDemarcation $K"
$Bind $Boutons.saverest <3> "AppendUneDemarcation $K"
$Pack $Boutons.saverest -side left -expand 1
$Button $Boutons.demarcation \
-text "To Rosac/DotPl/ Recomb\nLabels vert/hori/all\nErase vert/hori/all" \
-background "green"
$Bind $Boutons.demarcation <1> "DemarqueLaRosace $K"
$Bind $Boutons.demarcation <2> "DemarqueLeDotPlot $K"
$Bind $Boutons.demarcation <3> "RosaceDuDotPlot $K"
$Bind $Boutons.demarcation "Demarcation rev $K"
$Bind $Boutons.demarcation "Demarcation reh $K"
$Bind $Boutons.demarcation "Demarcation re $K"
$Bind $Boutons.demarcation "Demarcation dallv_ifyes $K "
$Bind $Boutons.demarcation "Demarcation dallh_ifyes $K"
$Bind $Boutons.demarcation "Demarcation dall_ifyes $K"
$Pack $Boutons.demarcation -side left -expand 1
$Fram $KShSv
$Scrollbar $ScroHor -orient horiz -command "$K xview"
$Scrollbar $ScroVer -command "$K yview"
$Canvas $K \
-width $LargeurVoulue \
-height $HauteurVoulue
$K configure \
-scrollregion [list $CanvaScroMinX $CanvaScroMinY $CanvaScroMaxX $CanvaScroMaxY] \
-xscrollcommand "$ScroHor set" \
-yscrollcommand "$ScroVer set"
set IdScrollRectangle($K) [$K create rectangle $CanvaScroMinX $CanvaScroMinY $CanvaScroMaxX $CanvaScroMaxY -outline "lightgrey" -tag [list "Cadre"]]
set ScrollRectangleOriginal($K) "[$K coords [set IdScrollRectangle($K)]]"
set ParametresDuDotPlot($K,MinX) $MinX
set ParametresDuDotPlot($K,MaxX) $MaxX
set ParametresDuDotPlot($K,MinY) $MinY
set ParametresDuDotPlot($K,MaxY) $MaxY
set ParametresDuDotPlot($K,LargeurMaxi) $LargeurMaxi
set ParametresDuDotPlot($K,HauteurMaxi) $HauteurMaxi
set PosCourbe 900
set OldPosX 0
set OldPosY $PosCourbe
set Tracons 0
foreach Moi $Nous Toi $Vous MaPos $NosPos TaPos $VosPos {
if { $DotPlotDesProches && ! [info exists Proches($MaPos,$TaPos)]} { continue }
set MonC [expr (($MaPos-$MinX)*$LargeurMaxi)/($MaxX-$MinX)]
set TonC [expr (($TaPos-$MinY)*$HauteurMaxi)/($MaxY-$MinY)]
set PenteCourante [set PenteLissee($MaPos)]
if {$PenteCourante < 0} {
set Couleur "blue"
}
if {$PenteCourante == 0} {
set Couleur "grey"
}
if {$PenteCourante > 0} {
set Couleur "red"
}
# $K create line $OldPosX $OldPosY $MonC [expr $PosCourbe-5*$PenteCourante]
set OldPosX $MonC
set OldPosY [expr $PosCourbe-5*$PenteCourante]
if {[info exists PlottePourBlastN]} {
if {$Tracons} {
set MonF $MonC
set TonF [expr $HauteurMaxi-$TonC]
# set Moi "$MoiD $MonC"
# set Toi "$ToiD $TonC"
if {$PourGif} {
set LesTags [list "WebEnter" "$Moi $Toi"]
} else {
set LesTags [list "$Moi" "$Toi" "Coeur"]
}
$K create line $MonD $TonD $MonF $TonF -fill "red" -tags $LesTags
set Tracons 0
} else {
set MoiD $MonC
set ToiD $TonC
set MonD $MonC
set TonD [expr $HauteurMaxi-$TonC]
set Tracons 1
}
continue
} else {
set L 300
if {$PourGif} {
set LesTags [list "WebEnter" "$Moi $Toi"]
} else {
set LesTags [list "$Moi" "$Toi" "Coeur"]
}
$K create rect \
[expr $MonC-$L] [expr $HauteurMaxi-$TonC-$L] \
[expr $MonC+$L] [expr $HauteurMaxi-$TonC+$L] \
-tags $LesTags \
-outline $Couleur \
-fill $Couleur
}
}
$Grid rowconfig $KShSv 0 -weight 1 -minsize 0
$Grid columnconfig $KShSv 0 -weight 1 -minsize 0
$Grid $K -in $KShSv -padx 1 -pady 1 -row 0 -column 0 -rowspan 1 -columnspan 1 -sticky nsew
$Grid $ScroVer -in $KShSv -padx 1 -pady 1 -row 0 -column 1 -rowspan 1 -columnspan 1 -sticky nsew
$Grid $ScroHor -in $KShSv -padx 1 -pady 1 -row 1 -column 0 -rowspan 1 -columnspan 1 -sticky nsew
$Pack $KShSv -expand yes -fill both -padx 1 -pady 1
$K bind "Coeur" <1> "PointeDotPlot $K %x %y"
$K bind "Coeur" "EntreDansCoeur $K %x %y"
$K bind "Coeur" "SortDeCoeur $K %x %y"
$K bind "Coeur" "Demarcation v $K %x %y"
$K bind "Coeur" "Demarcation vh $K %x %y"
$K bind "Coeur" "Demarcation h $K %x %y"
$K bind "Coeur" ""
$K bind "Coeur" ""
$K bind "Ligne" "Demarcation d $K %x %y"
$K bind "Etiquette" <1> "GereLesZoneEtiquettee $K %x %y text Point"
$K bind "Etiquette" "GereLesZoneEtiquettee $K %x %y text Motion"
$K bind "Etiquette" "GereLesZoneEtiquettee $K %x %y text Relache"
$K bind "Etiquette" <2> "GereLesZoneEtiquettee $K %x %y text Erase ; Demarcation d $K %x %y"
$K bind "Etiquette" <3> "GereLesZoneEtiquettee $K %x %y text ModifCouleur"
$K bind "Etiquette" "GereLesZoneEtiquettee $K %x %y text ModifTaille"
$K bind "Etiquette" "GereLesZoneEtiquettee $K %x %y text ModifTexte"
# $Bind $K <1> "PointeDotPlot $K %x %y"
$Bind $K <2> "$K scan mark %x %y"
$Bind $K "$K scan dragto %x %y"
lappend LesDotPlotCourants $K
set FacteurX [expr (1.0*$LargeurVoulue)/$LargeurMaxi]
set FacteurY [expr (1.0*$HauteurVoulue)/$HauteurMaxi]
if {! $PourGif} {
Gonfle $w all $FacteurX $FacteurY
}
if {$PourGif} { return $LesOrdresPourGif }
if { 0 && [PourWscope]} {
return $w$w
} else {
return $K
}
}
proc TourneLaListeAutour {Liste CentreX CentreY AngleDelta} {
Wup "Returns the rotated list"
set PI 3.14159
foreach {X Y} $Liste {
set Angle [AngleDansRosace "CoordonneesVraies" $X $Y $CentreX $CentreY]
set Rayon [RayonDansRosace "CoordonneesVraies" $X $Y $CentreX $CentreY]
set NouvelAngle [Entre0Et2PI [expr $Angle+$AngleDelta]]
lappend Sortie [expr $CentreX+$Rayon*cos($NouvelAngle)]
lappend Sortie [expr $CentreY+$Rayon*sin($NouvelAngle)]
}
return $Sortie
}
proc SwitchEnX {Liste PivotX} {
Wup "Returns the X-symetrical list"
foreach {X Y} $Liste {
lappend Sortie [expr $PivotX+$PivotX-$X]
lappend Sortie $Y
}
return $Sortie
}
proc ManipuleLaRosace {Action R Tag x y} {
Wup "Manages the point-and-motion for rotating the arcs"
global ParametresDuBoard
global AnglePoint
JeMeSignale
set CentreX [set ParametresDuBoard($R,CentreX)]
set CentreY [set ParametresDuBoard($R,CentreY)]
set X [$R canvasx $x]
set Y [$R canvasx $y]
if {$Action == "Point"} {
set AnglePoint [AngleDansRosace "CoordonneesVraies" $X $Y $CentreX $CentreY]
return
}
if {$Action == "Release"} {
if { ! [info exists AnglePoint]} { return }
set AngleRelease [AngleDansRosace "CoordonneesVraies" $X $Y $CentreX $CentreY]
set AngleDelta [Entre0Et2PI [expr $AngleRelease-$AnglePoint]]
}
foreach Id [$R find withtag $Tag] {
set Coordonnees [$R coords $Id]
if {$Action == "Switch"} {
set NouvellesCoordonnees [SwitchEnX $Coordonnees $CentreX]
}
if {$Action == "Release"} {
set NouvellesCoordonnees [TourneLaListeAutour $Coordonnees $CentreX $CentreY $AngleDelta]
}
eval $R coords $Id [split $NouvellesCoordonnees " "]
}
}
proc LongueurMoyenne {} {
Wup "Average length of the orfs."
global ListeDeBoites
if { ! [info exists ListeDeBoites]} { ChargeListeDeBoites }
set Mi 9999999
set Ma -999999
set CumulLong 0
set n 0
foreach Boite $ListeDeBoites {
set Nom [Box $Boite nom]
if { ! [EstUnPAB $Nom] } { continue }
set Debut [Box $Boite debut]
set Fin [Box $Boite fin]
set Orient [Box $Boite orient]
set Long [expr $Fin-$Debut+1]
set Mi [Mini $Long $Mi]
set Ma [Maxi $Long $Ma]
incr CumulLong $Long
incr n
}
set PourcentageCodant [format "%5.2f" [expr 100.*$CumulLong/[LongueurADN]]]
puts "$n ORFs mini [expr $Mi/3] maxi [expr $Ma/3] moyenne [expr $CumulLong/(3*$n)] $PourcentageCodant"
}
proc LongueurADN {{Orga ""}} {
Wup "Returns the length in bases of orga's genome"
global LongueurADNDesOrganismes
global ADN TDN RAC
if {$Orga==""} {
if {[info exists LongueurADNDesOrganismes("NotreOS")]} {
return [set LongueurADNDesOrganismes("NotreOS")]
}
if { ! [info exists ADN]} { ChargeADNetTDNetRAC }
set LongueurADNDesOrganismes("NotreOS") [expr [string length $ADN]-1]
return [set LongueurADNDesOrganismes("NotreOS")]
}
if {[info exists LongueurADNDesOrganismes($Orga)]} {
return [set LongueurADNDesOrganismes($Orga)]
}
if {[info exists LongueurADNDesOrganismes("SontCharges")]} {
return -1
}
ChargeLesPositionsDesOrthologues
return [LongueurADN $Orga]
}
proc HeureDePosADN {PosADN {Orga ""}} {
Wup "Returns the clock-wize angle in radian starting at 12:00"
set PI 3.14159
if {$Orga==""} {
return [expr $PosADN*2*$PI/[LongueurADN]]
}
return [expr $PosADN*2*$PI/[LongueurADN $Orga]]
}
proc RosaceDeLaRosaceCourante {Type {K ""} {Interieur ""} {Exterieur ""}} {
global RosaceCourante
global CurrentGenome
global TypeCouleur
if {$K==""} {
if { ! [info exists RosaceCourante]} {
RscopeBoard $CurrentGenome
}
set K $RosaceCourante
}
set TypeDeCouleur [set TypeCouleur($K)]
if {$Interieur==""} { set Interieur 0.75 ; set Exterieur 0.80 }
foreach Nom [ListeDesPABs] {
set Couleur [CouleurParTypeEtNom $TypeDeCouleur $Nom $K]
lappend LesPointes $Nom
lappend LesPointes $Couleur
}
AiguilleLaListe $LesPointes $K "UneListeEnPlus" "milieu" $Interieur $Exterieur
return $K
}
proc RosaceDesArcEnCiel {Type {Orga ""} {R ""} } {
Wup "Creates the wheel of orga's orthologs colored like CurrentGenome"
global RepertoireDuGenome
global ListeDeBoites
global ListeDesPABs
global RosaceCourante
global CurrentGenome
global LesAutresTagsPourAiguilles
set PI 3.14159
if {$R==""} {
if { ! [info exists RosaceCourante]} {
RscopeBoard $CurrentGenome
}
set R $RosaceCourante
}
if { ! [info exists ListeDeBoites]} { ChargeListeDeBoites }
if { ! [info exists ListeCompleteDesOrganismesAyantPosOrth]} {
set ListeCompleteDesOrganismesAyantPosOrth [PositionsDesOrthologues "LaListeDesOrgas" "genomes"]
}
set LesOrgas [CocheDansLaListe [concat $ListeCompleteDesOrganismesAyantPosOrth "AllTogether"]]
if {$LesOrgas==""} { return }
if {[lsearch $LesOrgas "AllTogether"] > -1} {
set LesOrgas $ListeCompleteDesOrganismesAyantPosOrth
}
set MaxExterieur 0.77
set MinInterieur 0.55
set MaxExterieur 1.35
set MinInterieur 1.15
set Delta [expr ($MaxExterieur-$MinInterieur)/[llength $LesOrgas]]
set Exterieur $MaxExterieur
foreach Orga $LesOrgas {
set Interieur [expr $Exterieur + $Delta*0.6]
set LesPointes {}
foreach Nom $ListeDesPABs {
set LesPosOrth [PositionsDesOrthologues $Nom "genomes" $Orga]
if {[llength $LesPosOrth]==0} { continue }
set PosOrth [lindex $LesPosOrth 0]
if {$PosOrth == -1 } { continue }
set HeureOrth [HeureDePosADN $PosOrth $Orga]
set Couleur [Nuance [expr $HeureOrth/(2*$PI)] 0.0 0.987]
lappend LesPointes $Nom
lappend LesPointes $Couleur
}
set LesAutresTagsPourAiguilles [list "RosaceArcEnCiel" "AEC_$Orga"]
AiguilleLaListe $LesPointes $R "UneListeEnPlus" "milieu" $Interieur $Exterieur
unset LesAutresTagsPourAiguilles
set Exterieur [expr $Exterieur - $Delta]
}
}
proc CouleurDeLaZone Nom {
Wup "Returns the color of Nom's zone in the dotplot"
global LesCouleursDesZones
set Milieu [expr ([Box $Nom debut]+[Box $Nom fin])/2]
foreach DebutFinCouleur $LesCouleursDesZones {
scan $DebutFinCouleur "%s %s %s" OldPosADN PosADN Couleur
if {$OldPosADN <= $Milieu && $Milieu <= $PosADN} { return $Couleur }
}
return "white"
}
proc RosaceDuDotPlot {K {R ""}} {
Wup "Creates the wheel of the dotplot"
global CurrentGenome
global RosaceCourante
global ParametresDuBoard
global ParametresDuDotPlot
global NePasDessinerLesZonesDansLaRosace
set PI 3.14159
if {$R==""} {
if { ! [info exists RosaceCourante]} {
RscopeBoard $CurrentGenome
}
set R $RosaceCourante
}
set xFin [set ParametresDuBoard($R,xFin)]
set CentreX [set ParametresDuBoard($R,CentreX)]
set CentreY [set ParametresDuBoard($R,CentreY)]
set RayonMoyen [set ParametresDuBoard($R,RayonMoyen)]
set OffsetRayonMin [set ParametresDuBoard($R,OffsetRayonMin)]
set OffsetRayonMax [set ParametresDuBoard($R,OffsetRayonMax)]
incr ParametresDuBoard($R,IemeCouche)
set IemeCouche [set ParametresDuBoard($R,IemeCouche)]
set MinX [set ParametresDuDotPlot($K,MinX)]
set MaxX [set ParametresDuDotPlot($K,MaxX)]
set MinY [set ParametresDuDotPlot($K,MinY)]
set MaxY [set ParametresDuDotPlot($K,MaxY)]
set LargeurMaxi [set ParametresDuDotPlot($K,LargeurMaxi)]
set HauteurMaxi [set ParametresDuDotPlot($K,HauteurMaxi)]
set LesDots [$K find withtag "Coeur"]
set LesTagsDePivotPossibles {"ABY0254" "ABY0247" "ABY0248"}
foreach TagDuPivot $LesTagsDePivotPossibles {
set IdDuPivot [$K find withtag $TagDuPivot]
if {$IdDuPivot > 0} { break }
}
scan [$K gettags $IdDuPivot] "%s %d" NomDuPivot PivotY
set PositionEquivalenteDuPivot [expr ([Box $NomDuPivot debut]+[Box $NomDuPivot fin])/2]
set CouleurDuPivot [CouleurDeLaZone $NomDuPivot]
set OldPos 0
foreach Dot $LesDots {
scan [$K gettags $Dot] "%s %d" Nom Pos
if {[info exists DejaVu($Pos)]} { continue }
set CouleurFouR [$K itemcget $Dot -fill]
if {$CouleurFouR=="red"} {
set FouR "R"
}
if {$CouleurFouR=="blue"} {
set FouR "F"
}
if {$CouleurFouR=="grey"} {
set FouR "Z"
}
set Couleur [CouleurDeLaZone $Nom]
if {$Couleur==$CouleurDuPivot} { set Couleur "black" }
set HeureF [Entre0Et2PI [expr ($Pos-$MinY)*2*$PI/($MaxY-$MinY)]]
set HeureCF [Entre0Et2PI [expr $PivotY*2*$PI/($MaxY-$MinY)]]
set HeureCA [Entre0Et2PI [expr $PositionEquivalenteDuPivot*2*$PI/($MaxX-$MinX)]]
set HeureA [Entre0Et2PI [expr $HeureCA+$HeureCF-$HeureF]]
set Angle [Entre0Et2PI [expr $PI/2-$HeureA]]
lappend LesAngles $Angle
set CouleurDe($Angle) $Couleur
set OrientationDe($Angle) [expr $Pos < $OldPos]
set DejaVu($Pos) 1
set OldPos $Pos
}
set LesAnglesTries [lsort -real $LesAngles]
set LesAngles2x [concat $LesAnglesTries $LesAnglesTries]
set OuvertureFenetre 50
set ScoreBascule 8
set CombienDeDejaVus 0
set LesCouleursLocales {}
foreach Angle $LesAngles2x {
set Couleur [set CouleurDe($Angle)]
set FouR [set OrientationDe($Angle)]
if { [llength $LesCouleursLocales] > $OuvertureFenetre } {
set OldCouleur [lindex $LesCouleursLocales 0]
set LesCouleursLocales [lreplace $LesCouleursLocales 0 0]
}
lappend LesCouleursLocales $Couleur
if {[info exists Histo($Couleur)]} {
incr Histo($Couleur) 1
} else {
set Histo($Couleur) 1
}
if {[info exists OldCouleur] && [incr Histo($OldCouleur) -1] == 0} { unset Histo($OldCouleur) }
set MeilleurScore -1
set CumulFouR 0
foreach {C ValHisto} [array get Histo] {
if {$FouR > 0} { incr CumulFouR } else { incr CumulFouR -1 }
set N $ValHisto
if {$N>$MeilleurScore} {
set MeilleurScore $N
set MeilleureCouleur $C
}
}
if {[info exists DejaVu($Angle)]} {
Espionne "DejaVu $Angle"
if {[incr CombienDeDejaVus] > 10} { break }
continue
}
set DejaVu($Angle) 1
if {$MeilleurScore > $ScoreBascule} {
if {$CumulFouR < 0} {
lappend LesPointes "Reverse_$Angle"
} else {
lappend LesPointes $Angle
}
lappend LesPointes $MeilleureCouleur
}
}
set Rayon [expr $RayonMoyen + $OffsetRayonMax + $IemeCouche*$OffsetRayonMax*0.5]
ArcLaListe $LesPointes $R "UneListeEnPlus" "angle" $Rayon $Rayon
return $R
}
proc DetruireLaRosace w {
Wup "Kills and erase the rosace from the currentlist"
global RosaceCourante
global ParametresDuBoard
global LesKanvasOuverts
global KanvaCourant
set K $w.canvas
destroy $w
set LesRosacesEnCours [set ParametresDuBoard(RosacesEnCours)]
set i [lsearch $LesRosacesEnCours $K]
if {$i >= 0} {
set LesRoacesEnCours [lreplace LesRosacesEnCours $i $i]
set ParametresDuBoard(RosacesEnCours) $LesRosacesEnCours
if {[info exists RosaceCourante] && $RosaceCourante==$K} {
if {[llength $LesRosacesEnCours] > 0} {
set RosaceCourante [lindex $LesRosacesEnCours end]
}
}
}
set i [lsearch $LesKanvasOuverts $K]
if {$i >= 0} {
set LesKanvasOuverts [lreplace LesKanvasOuverts $i $i]
if {[info exists KanvaCourant] && $KanvaCourant==$K} {
if {[llength $LesKanvasOuverts] > 0} {
set KanvaCourant [lindex $LesKanvasOuverts end]
}
}
}
return
}
proc TextePourRosace {Action K {ListeOuFichier {}}} {
global ParametresDuBoard
set CentreX [set ParametresDuBoard($K,CentreX)]
set CentreY [set ParametresDuBoard($K,CentreY)]
if {$Action == "Add"} {
set Liste $ListeOuFichier
if {$Liste == {}} {
set Texte [Entre]
if {$Texte == ""} { return }
$K create text $CentreX $CentreY -text "$Texte" -font {Courier 10} \
-tags [list "Etiquette" $Texte]
return $Texte
}
if {$Liste != {}} {
set DefautX $CentreX
set DefautY $CentreY
foreach Ligne $Liste {
set X [incr DefautX 10]
set Y [incr DefautY 10]
scan $Ligne "%s %s %s" Texte X Y
$K create text $X $Y -text "$Texte" -font {Courier 10} \
-tags [list "Etiquette" $Texte]
}
}
}
if {$Action == "AddFromList"} {
if {$ListeOuFichier == ""} {
set Fichier [ButineArborescence]
if {$Fichier == ""} { return "" }
foreach Ligne [LesLignesDuFichier $Fichier] {
set Texte "Bidon"
scan $Ligne "%s" Texte
lappend Liste $Texte
}
} else {
set Liste $ListeOuFichier
}
return [TextePourRosace "Add" $K $Liste]
}
}
proc LaFigureAutomatique2002 {} {
global RepertoireDuGenome
global NePasDessinerLesZonesDansLaRosace
global ParametresDuBoard
set R [RosaceDesPIOs "EnPlus" "" {phor pfur tmar bsub}]
set R [RosaceDesTwoGenesCluster "EnPlus" "" {phor pfur tmar bsub}]
RecoloreLesBoites ClassesFonctionnelles $R
}
proc LaFigureAutomatiqueMsFinal {} {
global RepertoireDuGenome
global NePasDessinerLesZonesDansLaRosace
global ParametresDuBoard
DecalageAngulaireRosace
# set R [RosaceDesPIOs "EnPlus" "" {mtub mlep}]
set R [RosaceDesTwoGenesCluster "EnPlus" "" {mtub mlep}]
set R [RosaceDesGCSkew "EnPlus" "" 0.75 0.80]
RecoloreLesBoites "NombreDeCopainsDansBlast" $R
}
proc LaFigureAutomatique {} {
global RepertoireDuGenome
global NePasDessinerLesZonesDansLaRosace
global ParametresDuBoard
Wup "Draws a rosace with org1 and org2 ... the dotplots have to be made before."
NousAllonsAuBoulot "$RepertoireDuGenome/figure"
set K [DotPlot genomes phor Proches]
# RestaureUneDemarcation $K "org1.dp"
# set NePasDessinerLesZonesDansLaRosace 1
set R [DemarqueLaRosace $K]
# catch {unset NePasDessinerLesZonesDansLaRosace}
#perdu set ParametresDuBoard($R,IemeCouche) 1
# set R [RosaceDuDotPlot $K]
set K [DotPlot genomes pfur Proches]
# RestaureUneDemarcation $K "org2.dp"
set ParametresDuBoard($R,IemeCouche) 0
#perdu set R [DemarqueLaRosace $K]
set ParametresDuBoard($R,IemeCouche) 2
# set R [RosaceDuDotPlot $K]
RosaceDesPIOs "EnPlus" "" {phor pfur tmar bsub}
RosaceDesTwoGenesCluster "EnPlus" "" {phor pfur tmar bsub}
OnRevientDuBoulot
}
proc GereLesZoneEtiquettee {K x y ItemType Action} {
global DernierXDeZoneEtiquettee DernierYDeZoneEtiquettee
global DernierStartDeZoneEtiquettee
global ZoneEtiquetteeTouchee
global LesCouleursDeZoneEtiquettee
global LesTaillesDeZoneEtiquettee
global CouleurDuFond
global ParametresDuBoard
set PI 3.14159
set X [$K canvasx $x]
set Y [$K canvasy $y]
set xFin [set ParametresDuBoard($K,xFin)]
set CentreX [set ParametresDuBoard($K,CentreX)]
set CentreY [set ParametresDuBoard($K,CentreY)]
if { ! [info exists LesCouleursDeZoneEtiquettee] } {
set LesCouleursDeZoneEtiquettee {}
lappend LesCouleursDeZoneEtiquettee "black"
lappend LesCouleursDeZoneEtiquettee "grey"
lappend LesCouleursDeZoneEtiquettee "white"
lappend LesCouleursDeZoneEtiquettee "blue"
lappend LesCouleursDeZoneEtiquettee "lightblue"
lappend LesCouleursDeZoneEtiquettee "yellow"
lappend LesCouleursDeZoneEtiquettee "green"
lappend LesCouleursDeZoneEtiquettee "orange"
lappend LesCouleursDeZoneEtiquettee "red"
lappend LesCouleursDeZoneEtiquettee "purple"
lappend LesCouleursDeZoneEtiquettee $CouleurDuFond
set LesTaillesDeZoneEtiquettee {"Raise" "Lower" "Extent" "Copy" "Other" 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20}
}
if {$Action == "Motion"} {
if { $ItemType=="arc" } {
set DeltaX [expr $x-$DernierXDeZoneEtiquettee]
set DeltaY [expr $y-$DernierYDeZoneEtiquettee]
set DernierStartDeZoneEtiquettee [expr $DernierStartDeZoneEtiquettee + $DeltaX]
$K itemconfigure $ZoneEtiquetteeTouchee -start $DernierStartDeZoneEtiquettee
} else {
$K move $ZoneEtiquetteeTouchee [expr $x-$DernierXDeZoneEtiquettee] [expr $y-$DernierYDeZoneEtiquettee]
}
set DernierXDeZoneEtiquettee $x
set DernierYDeZoneEtiquettee $y
return
}
set ZoneEtiquetteeTouchee [$K find withtag current]
if {$Action == "Point"} {
set ZoneEtiquetteeTouchee [$K find withtag current]
set DernierXDeZoneEtiquettee $x
set DernierYDeZoneEtiquettee $y
if { $ItemType=="arc"} {
set DernierStartDeZoneEtiquettee [$K itemcget $ZoneEtiquetteeTouchee -start]
}
return
}
if {$Action == "Erase"} {
if { ! [OuiOuNon "Do you really want to erase this $ItemType"]} {
return 0
}
$K delete $ZoneEtiquetteeTouchee
return 1
}
if {$Action == "ModifCouleur"} {
set Couleur [ChoixParmi \
[concat $LesCouleursDeZoneEtiquettee "NewColor"] \
[concat $LesCouleursDeZoneEtiquettee "white"]]
if {$Couleur == ""} { return "" }
if {$Couleur == "NewColor"} {
set Couleur [PaletteDeCouleurs]
if {$Couleur == ""} { return "" }
lappend LesCouleursDeZoneEtiquettee $Couleur
}
if { $ItemType=="polygone"} {
$K itemconfigure $ZoneEtiquetteeTouchee -fill $Couleur
$K itemconfigure $ZoneEtiquetteeTouchee -outline $Couleur
return $Couleur
}
if { $ItemType=="arc"} {
$K itemconfigure $ZoneEtiquetteeTouchee -outline $Couleur
return $Couleur
}
if { $ItemType=="text" || $ItemType=="line"} {
$K itemconfigure $ZoneEtiquetteeTouchee -fill $Couleur
return $Couleur
}
}
if {$Action == "ModifTaille"} {
set Taille [ChoixParmi $LesTaillesDeZoneEtiquettee]
if {$Taille == ""} { return "" }
if {$ItemType == "arc" && $Taille == "Copy"} {
set Extent [$K itemcget $ZoneEtiquetteeTouchee -extent]
$K itemconfigure $ZoneEtiquetteeTouchee -extent [expr $Extent*[Entre 0.9]]
return
}
if {$ItemType == "arc" && $Taille == "Extent"} {
set Extent [$K itemcget $ZoneEtiquetteeTouchee -extent]
$K itemconfigure $ZoneEtiquetteeTouchee -extent [expr $Extent*[Entre 0.9]]
return
}
if {$Taille == "Raise"} {
$K raise $ZoneEtiquetteeTouchee
return "Raise"
}
if {$Taille == "Lower"} {
$K raise $ZoneEtiquetteeTouchee
return "Lower"
}
if {$ItemType == "line" && $Taille == "Arrow"} {
set AvAr [$K itemcget $ZoneEtiquetteeTouchee -arrow]
if {$AvAr=="first"} { set AvAr "last" } else { set AvAr "first" }
$K itemconfigure $ZoneEtiquetteeTouchee -arrow $AvAr
return
}
if {$Taille == "Other"} {
set Taille [Entre 21]
if {$Taille == ""} { return "" }
lappend LesTaillesDeZoneEtiquettee $Taille
}
if { $ItemType=="arc" || $ItemType=="line" } {
$K itemconfigure $ZoneEtiquetteeTouchee -width $Taille
return $Taille
}
if { $ItemType=="text"} {
$K itemconfigure $ZoneEtiquetteeTouchee -font [list Courier $Taille]
return $Taille
}
}
if {$Action == "ModifTexte"} {
set Texte [Entre]
if {$Texte == ""} { return "" }
if { $ItemType=="text"} {
$K itemconfigure $ZoneEtiquetteeTouchee -text $Texte
return $Texte
}
}
}
proc DetruireLeDotPlot w {
global LesDotPlotCourants
set K "$w.grid.canva"
if { ! [OuiOuNon "Do you really want to dismiss this Dotplot ?"]} { return }
set i [lsearch $LesDotPlotCourants $K]
set LesDotPlotCourants [lreplace $LesDotPlotCourants $i $i]
destroy $w
return 1
}
proc DemarcationEnPositionDansFichier {K VouH {Fichier ""}} {
if {$Fichier == ""} {
set Fichier [ButineArborescence]
if {$Fichier == ""} { return }
}
foreach Ligne [LesLignesDuFichier $Fichier] {
if {[regexp {"#Don't remove this line it marks the end."} $Ligne]} { break }
if {[regexp {^\#} $Ligne]} { continue }
if { ! [regexp -nocase {[a-z0-9]} $Ligne]} { continue }
set Y 100
set Etiq "NoValue"
set n [scan $Ligne "%s %s %s" NomOuPosition Y Etiq]
if {$n<1} {
FaireLire "$Ligne\nis not correct. I'll skip it."
}
DemarcationEnPosition $K $VouH $NomOuPosition $Y $Etiq
}
}
proc DemarcationEnPosition {K VouH {NomOuPosition ""} {Y ""} {Etiquette ""}} {
global ParametresDuDotPlot
global ListeDeBoites
global xFinLocal
if { ! [info exists ListeDeBoites]} { ChargeLesBoites }
if { ! [info exists xFinLocal]} {
scan [BoundingBox $ListeDeBoites] "%d %d" xDebut xFinLocal
}
set xFin $xFinLocal
set MinX [set ParametresDuDotPlot($K,MinX)]
set MaxX [set ParametresDuDotPlot($K,MaxX)]
set MinY [set ParametresDuDotPlot($K,MinY)]
set MaxY [set ParametresDuDotPlot($K,MaxY)]
set LargeurMaxi [set ParametresDuDotPlot($K,LargeurMaxi)]
set HauteurMaxi [set ParametresDuDotPlot($K,HauteurMaxi)]
if {$NomOuPosition == ""} {
set NomOuPosition [Entre ""]
}
if {$NomOuPosition == ""} { return "" }
set Nom "Manual"
if {[YaPABouTROUouTRNAouARNenDebutDe $NomOuPosition]} {
regsub {\-\+} $NomOuPosition "" Nom
if {[Box $Nom nom]!=$Nom} {
FaireLire "$NomOuPosition not known"
return
}
if {[regexp {\-} $NomOuPosition]} {
set Position [Box $Nom debut]
} elseif {[regexp {\+} $NomOuPosition]} {
set Position [Box $Nom fin]
} else {
set Position [expr ([Box $Nom debut]+[Box $Nom fin])/2]
}
if {$Etiquette == ""} {
set Etiquette $Nom
}
set X "SurADN_$Position"
} else {
set X $NomOuPosition
}
Demarcation $VouH $K $X $Y $Etiquette
}
proc CleanRosace {K Quoi} {
global ParametresDuBoard
if {$Quoi=="Textes"} { set LesTags [list "Txt"] }
if {$Quoi=="Aiguilles"} { set LesTags [list "Aiguille"] }
if {$Quoi=="Zones"} {
set LesTags [list "Zone" "Etiquette"]
}
catch {unset ParametresDuBoard($K,IemeCouche)}
foreach Tag $LesTags {
foreach Id [$K find withtag $Tag] {
$K delete $Id
}
}
}
proc EntreMinEtMax {Angle m M} {
set D [expr $M-$m]
while {$Angle < $m} { set Angle [expr $Angle + $D] }
while {$Angle >= $M} { set Angle [expr $Angle - $D] }
return $Angle
}
proc Entre0Et360 Angle {
while {$Angle < 0} { set Angle [expr $Angle + 360] }
while {$Angle >= 360} { set Angle [expr $Angle - 360] }
return $Angle
}
proc Entre0Et2PI Angle {
set PI 3.14159
while {$Angle < 0} { set Angle [expr $Angle + 2*$PI] }
while {$Angle >= 2*$PI} { set Angle [expr $Angle - 2*$PI] }
return $Angle
}
proc SauveLaDemarcation {K {NomDuFichier ""}} {
set LesNoms [Demarcation "lv" $K]
set LesXs [Demarcation "av" $K]
set LesEtiq [Demarcation "ev" $K]
if {$NomDuFichier == ""} {
set NomDuFichier [FichierPourSaveAs]
}
if {$NomDuFichier == ""} { return "" }
foreach Nom $LesNoms X $LesXs Etiq $LesEtiq {
lappend Sortie "$Nom $X $Etiq"
}
lappend $Sortie "#Don't remove this line it marks the end."
return [SauveLesLignes $Sortie dans $NomDuFichier]
}
proc RestaureUneDemarcation {K {NomDuFichier ""}} {
Demarcation "dallv" $K
return [AppendUneDemarcation $K $NomDuFichier]
}
proc AppendUneDemarcation {K {NomDuFichier ""}} {
if {$NomDuFichier == ""} {
set NomDuFichier [ButineArborescence]
}
if {$NomDuFichier == ""} { return "" }
set Y 100
set Etiquette "NoValue"
foreach Ligne [LesLignesDuFichier $NomDuFichier] {
if {[regexp {"#Don't remove this line it marks the end."} $Ligne]} { break }
if {[regexp {^\#} $Ligne]} { continue }
if { ! [regexp -nocase {[a-z0-9]} $Ligne]} { continue }
set n [scan $Ligne "%s %s %s" Nom Y Etiq]
DemarcationEnPosition $K "v" $Nom $Y $Etiq
}
return $NomDuFichier
}
proc MiseAJourDesEtiquettes K {
global LesDemarcationsVerticales
global LesDemarcationsHorizontales
global LesAbscissesVerticales
global LesAbscissesHorizontales
global LesEtiquettesVerticales
global LesEtiquettesHorizontales
foreach Id [$K find withtag "Etiquette"] {
set SesTags [$K gettags $Id]
set Position [lindex $SesTags 1]
set i [lsearch [set LesAbscissesVerticales($K)] $Position]
set Etiquette [lindex [set LesEtiquettesVerticales($K)] $i]
set SesTags [lreplace $SesTags 5 5 $Etiquette]
$K itemconfigure $Id -text $Etiquette -tags $SesTags
}
}
proc NouveauNomDeZoneDeDemarcation K {
global NomDeZoneDeDemarcation NumeroDeZoneDeDemarcation
if { ! [info exists NomDeZoneDeDemarcation($K)]} {
set NomDeZoneDeDemarcation($K) "Zone"
set NumeroDeZoneDeDemarcation($K) "0"
}
return [set NomDeZoneDeDemarcation($K)][incr NumeroDeZoneDeDemarcation($K)]
}
proc TrieLesListesDeDemarcation {K VouH} {
global LesDemarcationsVerticales
global LesDemarcationsHorizontales
global LesAbscissesVerticales
global LesAbscissesHorizontales
global LesEtiquettesVerticales
global LesEtiquettesHorizontales
if {$VouH=="v"} {
set ListeA [set LesAbscissesVerticales($K)]
set ListeB [set LesDemarcationsVerticales($K)]
set ListeC [set LesEtiquettesVerticales($K)]
}
if {$VouH=="h"} {
set ListeA [set LesAbscissesHorizontales($K)]
set ListeB [set LesDemarcationsHorizontales($K)]
set ListeC [set LesEtiquettesHorizontales($K)]
}
foreach A $ListeA B $ListeB C $ListeC {
set Bdu($A) $B
set Cdu($A) $C
}
set ListeATriee [lsort -integer $ListeA]
foreach A $ListeATriee {
lappend ListeBTriee [set Bdu($A)]
lappend ListeCTriee [set Cdu($A)]
}
if {$VouH=="v"} {
set LesAbscissesVerticales($K) $ListeATriee
set LesDemarcationsVerticales($K) $ListeBTriee
set LesEtiquettesVerticales($K) $ListeCTriee
return
}
if {$VouH=="h"} {
set LesAbscissesHorizontales($K) $ListeATriee
set LesDemarcationsHorizontales($K) $ListeBTriee
set LesEtiquettesHorizontales($K) $ListeCTriee
return
}
}
proc RayonDansRosace {R X Y {CentreX ""} {CentreY ""}} {
global ParametresDuBoard
if {$CentreX == ""} {
set CentreX [set ParametresDuBoard($R,CentreX)]
set CentreY [set ParametresDuBoard($R,CentreY)]
}
if {$R == "CoordonneesVraies"} {
set xVrai $X
set yVrai $Y
} else {
set xVrai [$R canvasx $X]
set yVrai [$R canvasy $Y]
}
set x [expr $xVrai-$CentreX]
set y [expr $yVrai-$CentreY]
set Rayon [expr sqrt($x*$x+$y*$y)]
return $Rayon
}
proc HeureDansRosace {R X {Y ""} {CentreX ""} {CentreY ""}} {
set PI 3.14159
return [Entre0Et2PI [expr $PI/2+[AngleDansRosace $R $X $Y $CentreX $CentreY] ]]
}
proc AngleDansRosace {R X {Y ""} {CentreX ""} {CentreY ""}} {
global ParametresDuBoard
set PI 3.14159
if {[regexp -nocase {[a-z]} $X]} {
set Nom $X
set PosADN [Milieu $Nom]
set Heure [expr $PosADN*2*$PI/[LongueurADN]]
set Angle [expr -$PI/2 - $Heure]]
set Angle [expr $Angle + [DecalageAngulaireRosace]]
set Angle [Entre0Et2PI [expr -$PI/2 - $Heure]]
return $Angle
}
if {$CentreX == ""} {
set CentreX [set ParametresDuBoard($R,CentreX)]
set CentreY [set ParametresDuBoard($R,CentreY)]
}
if {$R == "CoordonneesVraies"} {
set xVrai $X
set yVrai $Y
} else {
set xVrai [$R canvasx $X]
set yVrai [$R canvasy $Y]
}
set x [expr $xVrai-$CentreX]
set y [expr $yVrai-$CentreY]
if {[expr abs($x) < 1] && [expr abs($y) < 1]} { return 0.0 }
if {[expr abs($x) < 1] && [expr $y > 0]} {
set Angle [expr $PI/2]
} elseif {[expr abs($x) < 1] && [expr $y < 0]} {
set Angle [expr 3*$PI/2]
} else {
set Angle [expr atan($y*1.0/$x)]
if {$x<0} { set Angle [expr $Angle + $PI] }
set Angle [expr $Angle + [DecalageAngulaireRosace]]
set Angle [Entre0Et2PI $Angle]
}
return $Angle
}
proc DuPlotteCourant {K X Y Qui} {
set LesIds [$K find withtag current]
foreach Id $LesIds {
set Moi [lindex [$K gettags $Id] 0]
set Toi [lindex [$K gettags $Id] 1]
if {[regexp -nocase {[a-z]} $Toi]} { continue }
if {$Qui == "PAB"} {
return $Moi
} else {
return $Toi
}
}
}
proc DemarqueLeDotPlot {K {D ""}} {
global RosaceCourante
global NePasEffacerLesRepereBox
global CurrentGenome
global LesDotPlotCourants
if {$D==""} {
if {[llength $LesDotPlotCourants]==1} {
FaireLire "Please, open an other DotPlot."
return
}
set i [lsearch $LesDotPlotCourants $K]
set LesAutres [lreplace $LesDotPlotCourants $i $i]
set D [ChoixParmi $LesAutres]
if {$D==""} { return }
}
set LesNoms [Demarcation "lv" $K]
set LesXs [Demarcation "av" $K]
set LesEtiq [Demarcation "ev" $K]
foreach Nom $LesNoms X $LesXs Etiq $LesEtiq {
Demarcation v $D $X $Nom $Etiq
}
}
proc DemarqueLaRosace {K {R ""}} {
global RosaceCourante
global NePasEffacerLesRepereBox
global CurrentGenome
global ParametresDuBoard
global ParametresDuDotPlot
global CouleurArcDeZone
global LesCouleursDesZones
global NePasDessinerLesZonesDansLaRosace
set MinX [set ParametresDuDotPlot($K,MinX)]
set MaxX [set ParametresDuDotPlot($K,MaxX)]
set MinY [set ParametresDuDotPlot($K,MinY)]
set MaxY [set ParametresDuDotPlot($K,MaxY)]
set LargeurMaxi [set ParametresDuDotPlot($K,LargeurMaxi)]
set HauteurMaxi [set ParametresDuDotPlot($K,HauteurMaxi)]
if {$R==""} {
if { ! [info exists RosaceCourante]} {
RscopeBoard $CurrentGenome
}
set R $RosaceCourante
}
if { ! [info exists ParametresDuBoard($R,IemeCouche)]} {
set ParametresDuBoard($R,IemeCouche) 0
}
incr ParametresDuBoard($R,IemeCouche)
set PI 3.14159
set xFin [set ParametresDuBoard($R,xFin)]
set CentreX [set ParametresDuBoard($R,CentreX)]
set CentreY [set ParametresDuBoard($R,CentreY)]
set RayonMoyen [set ParametresDuBoard($R,RayonMoyen)]
set OffsetRayonMin [set ParametresDuBoard($R,OffsetRayonMin)]
set OffsetRayonMax [set ParametresDuBoard($R,OffsetRayonMax)]
set IemeCouche [set ParametresDuBoard($R,IemeCouche)]
set RayonInt [expr $RayonMoyen + $OffsetRayonMax + $IemeCouche*$OffsetRayonMax*0.5]
set RayonExt $RayonInt
set LesNoms [Demarcation "lv" $K]
set LesXs [Demarcation "av" $K]
set LesEtiq [Demarcation "ev" $K]
set RayonCourant $RayonExt
set NePasEffacerLesRepereBox 1
set LesCouleursDesZones {}
foreach Nom $LesNoms X $LesXs Etiq $LesEtiq {
set MaPos $X
set Angle [Entre0Et2PI [expr $PI/2-$MaPos*2*$PI/$xFin]]
Espionne "$Nom $X $Etiq $MaPos $Angle"
if {[regexp -nocase "vide" $Etiq]} { set NonVide 0 } else { set NonVide 1 }
if { 0 && $RayonCourant == $RayonInt } {
set RayonCourant $RayonExt
} else {
set RayonCourant $RayonInt
}
set PosX [PositionCanvaActuelleX $R [expr $CentreX+$RayonCourant*cos($Angle)]]
set PosY [PositionCanvaActuelleY $R [expr $CentreY-$RayonCourant*sin($Angle)]]
# RepereBox "Nom: $Nom" $R "SansInforme"
if {[info exists OldPosX]} {
set OldHeure [Entre0Et2PI [expr $PI/2-$OldAngle]]
set Heure [Entre0Et2PI [expr $PI/2-$Angle]]
set HeureTexte [Entre0Et2PI [expr ($OldHeure+$Heure)/2]]
set AngleCouleur [Entre0Et2PI [expr $HeureTexte+2*$PI/12]]
set AngleTexte [Entre0Et2PI [expr $PI/2-$HeureTexte]]
set TextePosX [expr $CentreX+$RayonCourant*0.97*cos($AngleTexte)]
set TextePosY [expr $CentreY-$RayonCourant*0.97*sin($AngleTexte)]
if {$NonVide} {
# set CouleurArcDeZone [Nuance $AngleCouleur/(2*$PI) 0.0 0.987]
set CouleurArcDeZone [CouleurExquiseDeLaZone $Etiq "VraieCouleur"]
set CouleurEtiquettee [CouleurExquiseDeLaZone $Etiq ""]
} else {
set CouleurArcDeZone "VIDE"
set CouleurEtiquettee "VIDE"
}
set OldPosADN [expr $OldHeure*$xFin/(2*$PI)]
set PosADN [expr $Heure*$xFin/(2*$PI)]
lappend LesCouleursDesZones "$OldPosADN $PosADN $CouleurEtiquettee"
if {$NonVide} {
set MemoCouleurArcDeZone $CouleurArcDeZone
set CouleurArcDeZone "black"
set Delta [expr [LongueurADN]/977]
if { ! [info exists NePasDessinerLesZonesDansLaRosace]} {
# set IdP [ShowNucRosace $R $OldPosX $OldPosY "Point" $OldMaPos]
# set IdM [ShowNucRosace $R $PosX $PosY "Motion" [expr $MaPos]]
set CouleurArcDeZone $MemoCouleurArcDeZone
set IdP [ShowNucRosace $R $OldPosX $OldPosY "Point" [expr $OldMaPos+$Delta]]
set IdM [ShowNucRosace $R $PosX $PosY "Motion" [expr $MaPos-$Delta]]
$R addtag "Zone" withtag $IdM
FlecheSurArc $R $IdM "F"
$R create text $TextePosX $TextePosY \
-text "$Etiq" \
-anchor "c" \
-font {Courier 10} \
-tags [list "$Etiq" "Etiquette"]
}
}
unset CouleurArcDeZone
}
BindLaRosace $R
set OldMaPos $MaPos
set OldPosX $PosX
set OldPosY $PosY
set OldAngle $Angle
}
catch {unset NePasEffacerLesRepereBox}
return $R
}
proc Demarcation {Action K {X ""} {Y ""} {E ""}} {
Wup "X peut etre un x de clic, une position ADN ou un Nom"
global LesDemarcationsVerticales
global LesDemarcationsHorizontales
global LesAbscissesVerticales
global LesAbscissesHorizontales
global LesEtiquettesVerticales
global LesEtiquettesHorizontales
global ScrollRectangleOriginal IdScrollRectangle
global NePasDessinerLesZonesDansLaRosace
JeMeSignale
scan "[$K coords [set IdScrollRectangle($K)]]" "%f %f %f %f" Gauche Haut Droite Bas
if {$X!=""} {
if {[regexp "SurADN_" $X]} {
set Nom $X
regsub "SurADN_" $X "" XPositionADN
set XActuel [PositionCanvaActuelleX $K $XPositionADN]
} else {
scan [$K gettags [$K find withtag current]] "%s %s %s" Nom Toi Coeur
set XPositionADN [Milieu $Nom]
set XActuel [$K canvasx $X]
}
set XduTexte $XActuel
}
if {$Y!=""} {
if {[regexp "SurADN_" $Y] || [regexp "SurADN_" $X]} {
regsub "SurADN_" $Y "" YPositionADN
set YActuel [PositionCanvaActuelleY $K $YPositionADN]
} else {
scan [$K gettags [$K find withtag current]] "%s %s %s" Nom Toi Coeur
set YPositionADN $Toi
set YActuel [$K canvasy $Y]
}
set YduTexte $YActuel
}
if {[regexp "_ifyes" $Action]} {
if { ! [OuiOuNon "Do you really want to erase the lines ?"]} { return }
}
regsub "_ifyes" $Action "" Action
if {$Action == "dall"} {
set LesIds [$K find withtag "Ligne"]
foreach Id $LesIds {
$K delete $Id
}
set LesIds [$K find withtag "Etiquette"]
foreach Id $LesIds {
$K delete $Id
}
set LesDemarcationsVerticales($K) {}
set LesAbscissesVerticales($K) {}
set LesEtiquettesVerticales($K) {}
set LesDemarcationsHorizontales($K) {}
set LesAbscissesHorizontales($K) {}
set LesEtiquettesHorizontales($K) {}
return
}
if {$Action == "dallv"} {
set LesIds [$K find withtag "verticale"]
foreach Id $LesIds {
$K delete $Id
}
set LesDemarcationsVerticales($K) {}
set LesAbscissesVerticales($K) {}
set LesEtiquettesVerticales($K) {}
return
}
if {$Action == "dallh"} {
set LesIds [$K find withtag "horizontale"]
foreach Id $LesIds {
$K delete $Id
}
set LesDemarcationsHorizontales($K) {}
set LesAbscissesHorizontales($K) {}
set LesEtiquettesHorizontales($K) {}
return
}
if {$Action == "d"} {
set LesIds [$K find withtag current]
foreach Id $LesIds {
set VouH [lindex [$K gettags $Id] 3]
set NomOuNum [lindex [$K gettags $Id] 0]
if {$VouH == "verticale"} {
set i [lsearch [set LesDemarcationsVerticales($K)] $NomOuNum]
if { $i < 0 } { continue }
set LesDemarcationsVerticales($K) [lreplace [set LesDemarcationsVerticales($K)] $i $i]
set LesAbscissesVerticales($K) [lreplace [set LesAbscissesVerticales($K)] $i $i]
set LesEtiquettesVerticales($K) [lreplace [set LesEtiquettesVerticales($K)] $i $i]
}
if {$VouH == "horizontale"} {
set i [lsearch $LesDemarcationsHorizontales($K) $NomOuNum]
if { $i < 0 } { continue }
set LesDemarcationsHorizontales($K) [lreplace [set LesDemarcationsHorizontales($K)] $i $i]
set LesAbscissesHorizontales($K) [lreplace [set LesAbscissesHorizontales($K)] $i $i]
set LesEtiquettesHorizontales($K) [lreplace [set LesEtiquettesHorizontales($K)] $i $i]
}
$K delete $Id
}
return
}
if {$Action == "rev"} {
set Texte [EntreTexte [join [set LesEtiquettesVerticales($K)] "\n"]]
if {$Texte == ""} { return }
regsub "\n$" $Texte "" Texte
set LesNouvellesEtiquettes [split $Texte "\n"]
if {[llength $LesNouvellesEtiquettes] != [llength [set LesEtiquettesVerticales($K)]]} {
FaireLire "Sorry, you lose or add a label. I can't accept your modification"
}
set LesEtiquettesVerticales($K) $LesNouvellesEtiquettes
MiseAJourDesEtiquettes $K
return $LesNouvellesEtiquettes
}
if {$Action == "e"} {
set LesIds [$K find withtag current]
foreach Id $LesIds {
set VouH [lindex [$K gettags $Id] 3]
set NomOuNum [lindex [$K gettags $Id] 0]
if {$VouH == "verticale"} {
set i [lsearch [set LesDemarcationsVerticales($K)] $NomOuNum]
if { $i < 0 } { continue }
set EtiquetteVerticale [lindex LesEtiquettesVerticales($K) $i]
set NouvelleEtiquette [Entre $EtiquetteVerticale]
if {$NouvelleEtiquette==""} { return }
set LesEtiquettesVerticales($K) [lreplace $LesEtiquettesVerticales($K) $i $i $NouvelleEtiquette]
}
if {$VouH == "horizontale"} {
set i [lsearch $LesDemarcationsHorizontales($K) $NomOuNum]
if { $i < 0 } { continue }
set EtiquetteHorizontale [lindex LesEtiquettesHorizontales($K) $i]
set NouvelleEtiquette [Entre $EtiquetteHorizontale]
if {$NouvelleEtiquette==""} { return }
set LesEtiquettesHorizontales($K) [lreplace $LesEtiquettesHorizontales($K) $i $i $NouvelleEtiquette]
}
}
return
}
if {$Action == "lv"} {
if {[info exists LesDemarcationsVerticales($K)]} {
return [set LesDemarcationsVerticales($K)]
} else {
return {}
}
}
if {$Action == "lh"} {
if {[info exists LesDemarcationsHorizontales($K)]} {
return [set LesDemarcationsHorizontales($K)]
} else {
return {}
}
}
if {$Action == "av"} {
if {[info exists LesDemarcationsVerticales($K)]} {
return [set LesAbscissesVerticales($K)]
} else {
return {}
}
}
if {$Action == "ah"} {
if {[info exists LesDemarcationsHorizontales($K)]} {
return [set LesAbscissesHorizontales($K)]
} else {
return {}
}
}
if {$Action == "ev"} {
if {[info exists LesDemarcationsVerticales($K)]} {
return [set LesEtiquettesVerticales($K)]
} else {
return {}
}
}
if {$Action == "eh"} {
if {[info exists LesDemarcationsHorizontales($K)]} {
return [set LesEtiquettesHorizontales($K)]
} else {
return {}
}
}
if {$Action == "v" || $Action == "vh"} {
if {$Action=="vh"} {
set Haut [expr $YActuel-5]
set Bas [expr $YActuel+5]
}
lappend LesDemarcationsVerticales($K) $Nom
lappend LesAbscissesVerticales($K) $XPositionADN
if {$E == ""} {
set Etiquette [NouveauNomDeZoneDeDemarcation $K]
} else {
set Etiquette $E
}
lappend LesEtiquettesVerticales($K) $Etiquette
TrieLesListesDeDemarcation $K "v"
$K create line $XActuel $Haut $XActuel $Bas -tags [list $Nom $X "Ligne" "verticale"]
$K create text $XduTexte $YduTexte \
-text "$Etiquette" \
-anchor "e" \
-tags [list $Nom $X "Etiquette" "verticale" $Y $Etiquette]
}
if {$Action == "h" || $Action == "vh"} {
if {$Action=="vh"} {
set Gauche [expr $XActuel-5]
set Droite [expr $XActuel+5]
}
$K create line $Gauche $YActuel $Droite $YActuel -tags [list $Nom $YPositionADN "Ligne" "horizontale"]
lappend LesDemarcationsHorizontales($K) $YPositionADN
lappend LesAbscissesHorizontales($K) $YPositionADN
lappend LesEtiquettesHorizontales($K) [NomDe Etiquette]
TrieLesListesDeDemarcation $K "h"
}
return
}
proc TPIO {} {
foreach Nom [ListeDesPABs] {
Espionne [time {set PIO [PourcentageIdentiteOrga $Nom taci]}]
Espionne $PIO
}
exit
}
proc PourcentageIdentiteOrga {Nom Orga {FichierPIC ""}} {
global RepertoireDuGenome
global PourcentageIdentiteOrga
global LesOrgasDePIO
global NotreOS
global NotreOrga
Wup "If FichierPIC is empty we work normally on current genome"
set FiPIC $FichierPIC
set NOF "$Nom,$Orga,$FiPIC"
if { [info exists PourcentageIdentiteOrga($NOF)]} {
return [set PourcentageIdentiteOrga($NOF)]
} else {
if {0 && [info exists PourcentageIdentiteOrga("EstCharge",$FiPIC)]} {
return -1
}
}
if {$FichierPIC==""} {
set Extension ".$NotreOrga"
set FichierPIC "$RepertoireDuGenome/fiches/piclustalw$Extension"
}
if {$Nom == "LaListe"} { set RendreLaListe 1 } else { set RendreLaListe 0 }
if { ! [info exists PourcentageIdentiteOrga("EstCharge",$FiPIC)]} {
set PourcentageIdentiteOrga("EstCharge",$FiPIC) "EstCharge"
if { ! [file exists $FichierPIC]} { return "PourcentageIdentiteOrgaNonValide" }
Espionne "Je charge $FichierPIC"
foreach Ligne [LesLignesDuFichier $FichierPIC] {
set Liste [split $Ligne " "]
set NomLu [lindex $Liste 0]
set ListeOrgaPIC [lrange $Liste 1 end]
foreach {OrgaLu PI} $ListeOrgaPIC {
if {[info exists PourcentageIdentiteOrga($NomLu,$OrgaLu,$FiPIC)]} { continue }
if { ! [info exists DejaVu($OrgaLu)]} {
lappend LesOrgasDePIO $OrgaLu
set DejaVu($OrgaLu) 1
}
set NOFlu "$NomLu,$OrgaLu,$FiPIC"
set PourcentageIdentiteOrga($NOFlu) $PI
}
}
}
if {$RendreLaListe} { return $LesOrgasDePIO }
if {[info exists PourcentageIdentiteOrga($NOF)]} {
return [set PourcentageIdentiteOrga($NOF)]
} else {
return -1
}
}
proc InteRosace {Type {K ""}} {
global RosaceCourante
global LesInteRosacesPossibles
global LesInteRosaces
if {$K==""} {
if { ! [info exists RosaceCourante]} {
RscopeBoard $CurrentGenome
}
set K $RosaceCourante
}
if {$Type=="Which"} {
if { ! [info exists $LesInteRosaces($K)] || [llength $LesInteRosaces($K)]==0} {
FaireLire "No Interior Wheel"
} else {
FaireLire "[join $LesInteRosaces($K) "\n"]"
}
return ""
}
if {$Type=="New"} { AiguilleLaListe {} $K "UneListe" }
if { ! [info exists LesInteRosacesPossibles]} {
foreach Procedure [info procs] {
if {[regexp "^RosaceDe" $Procedure]} {
lappend LesInteRosacesPossibles $Procedure
}
}
}
set InteRo [ChoixParmi [concat $LesInteRosacesPossibles "Erase_all"]]
if {$InteRo==""} { return "" }
if {$InteRo=="Erase_all"} { AiguilleLaListe {} $K "UneListe" ; return "" }
lappend LesInteRosaces($K) $InteRo
$InteRo $K
}
proc RosaceDesPIOs {Type {K ""} {LesOrgas ""}} {
global RepertoireDuGenome
global ListeDeBoites
global ListeDesPABs
global RosaceCourante
global CurrentGenome
global ListeCompleteDesOrganismesAyantMemeOperon
if {$K==""} {
if { ! [info exists RosaceCourante]} {
RscopeBoard $CurrentGenome
}
set K $RosaceCourante
}
if { ! [info exists ListeDeBoites]} { ChargeListeDeBoites }
if {$LesOrgas == ""} {
if { ! [info exists ListeCompleteDesOrganismesAyantPIO]} {
set ListeCompleteDesOrganismesAyantPIO [PourcentageIdentiteOrga "LaListe" "Merci"]
}
set LesOrgas [CocheDansLaListe [concat $ListeCompleteDesOrganismesAyantPIO "AllTogether"]]
if {$LesOrgas==""} { return $K }
if {[lsearch $LesOrgas "AllTogether"] > -1} {
set LesOrgas $ListeCompleteDesOrganismesAyantMemeOperon
}
}
set MaxExterieur 0.45
set MinInterieur 0.30
set Delta [expr ($MaxExterieur-$MinInterieur)/[llength $LesOrgas]]
set Exterieur $MaxExterieur
foreach Orga $LesOrgas {
set Interieur [expr $Exterieur + $Delta*0.6]
set LesPointes {}
foreach Nom $ListeDesPABs {
set PIO [PourcentageIdentiteOrga $Nom $Orga]
if {$PIO == -1 } { continue }
if {$PIO > 80} {
set Couleur "red"
} elseif {$PIO > 50} {
set Couleur "orange"
} elseif {$PIO > 30} {
set Couleur "green"
} else { continue }
lappend LesPointes $Nom
lappend LesPointes $Couleur
}
AiguilleLaListe $LesPointes $K "UneListeEnPlus" "milieu" $Interieur $Exterieur
set Exterieur [expr $Exterieur - $Delta]
}
return $K
}
proc RosaceDesTwoGenesCluster {Type {K ""} {LesOrgas ""}} {
global RepertoireDuGenome
global ListeDeBoites
global ListeDesPABs
global RosaceCourante
global CurrentGenome
global ListeCompleteDesOrganismesAyantMemeOperon
Gs "Rien"
if {$K==""} {
if { ! [info exists RosaceCourante]} {
RscopeBoard $CurrentGenome
}
set K $RosaceCourante
}
if { ! [info exists ListeDeBoites]} { ChargeListeDeBoites }
if {$LesOrgas==""} {
if { ! [info exists ListeCompleteDesOrganismesAyantMemeOperon]} {
ChargeLesOrganismesAyantMemeOperon
}
set LesOrgas [CocheDansLaListe [concat $ListeCompleteDesOrganismesAyantMemeOperon "AllTogether"]]
if {$LesOrgas==""} { return $K }
if {[lsearch $LesOrgas "AllTogether"] > -1} {
set LesOrgas $ListeCompleteDesOrganismesAyantMemeOperon
}
}
set MaxExterieur 0.50
set MinInterieur 0.30
if {[regexp "MsFinal" [RepertoireDuGenome]]} {
set MaxExterieur 0.65
set MinInterieur 0.40
}
set Delta [expr ($MaxExterieur-$MinInterieur)/[llength $LesOrgas]]
set Exterieur $MaxExterieur
foreach Orga $LesOrgas {
set Interieur [expr $Exterieur + $Delta*0.6]
set LesPointes {}
foreach Nom $ListeDesPABs {
set ListeOMO [ListeDesOrganismesAyantMemeOperon $Nom]
if {[lsearch $ListeOMO $Orga] == -1} { continue }
lappend LesPointes $Nom
lappend LesPointes "black"
}
AiguilleLaListe $LesPointes $K "UneListeEnPlus" "milieu" $Interieur $Exterieur
set Exterieur [expr $Exterieur - $Delta]
}
return $K
}
proc RosaceDesCas {Type {K ""} {Interieur ""} {Exterieur ""}} {
global RepertoireDuGenome
global ListeDeBoites
global ListeDesPABs
global RosaceCourante
global CurrentGenome
if {$K==""} {
if { ! [info exists RosaceCourante]} {
RscopeBoard $CurrentGenome
}
set K $RosaceCourante
}
if {$Interieur==""} { set Interieur 0.75 ; set Exterieur 0.80 }
if { ! [info exists ListeDeBoites]} { ChargeListeDeBoites }
set Black 0
set Red 0
set Orange 0
foreach Nom $ListeDesPABs {
if {[Fantome $Nom]} {
set Couleur $CouleurDuFond
} elseif {[regexp "CasNonConnu" [Cas $Nom]]} {
set Couleur "white"
} elseif {[regexp {^1} [Cas $Nom]]} {
set Couleur "black"
incr Black
} elseif {[regexp {1$} [Cas $Nom]]} {
set Couleur "red"
incr Red
} elseif {[regexp {1,0$} [Cas $Nom]]} {
set Couleur "orange"
incr Orange
} elseif {[regexp {1,0,0$} [Cas $Nom]]} {
set Couleur "yellow"
} else {
set Couleur "green"
}
if {$Couleur=="black" || $Couleur=="red" } {
lappend LesPointes $Nom
lappend LesPointes $Couleur
}
}
AiguilleLaListe $LesPointes $K "UneListeEnPlus" "milieu" $Interieur $Exterieur
return $K
}
proc RosaceDesPhylosFolles {Type {K ""} {Interieur ""} {Exterieur ""}} {
global RepertoireDuGenome
global ListeDeBoites
global ListeDesPABs
global RosaceCourante
global CurrentGenome
if {$K==""} {
if { ! [info exists RosaceCourante]} {
RscopeBoard $CurrentGenome
}
set K $RosaceCourante
}
if {$Interieur==""} { set Interieur 0.75 ; set Exterieur 0.80 }
if { ! [info exists ListeDeBoites]} { ChargeListeDeBoites }
foreach Nom $ListeDesPABs {
if {[PhyloFolle $Nom]} {
lappend LesPointes $Nom
lappend LesPointes "red"
}
}
AiguilleLaListe $LesPointes $K "UneListeEnPlus" "milieu" $Interieur $Exterieur
return $K
}
proc RosaceDesTables {Type {K ""} {Interieur ""} {Exterieur ""}} {
global RepertoireDuGenome
global ListeDeBoites
global ListeDesPABs
global RosaceCourante
global CurrentGenome
global OuEstIlRetenu
if {$K==""} {
if { ! [info exists RosaceCourante]} {
RscopeBoard $CurrentGenome
}
set K $RosaceCourante
}
if {$Interieur==""} { set Interieur 0.75 ; set Exterieur 0.80 }
if { ! [info exists ListeDeBoites]} { ChargeListeDeBoites }
if { ! [info exists LesNomDesTables]} {
set LesNomsDesTables {"no_ark" "manque_euryarks" "toutes_euryarks"}
set LesCouleursDesTables {"red" "orange" "green" }
foreach Table $LesNomsDesTables {
foreach Ligne [LesLignesDuFichier "$RepertoireDuGenome/fiches/pabretenus.$Table"] {
scan $Ligne "%s" Nom
set ${Table}($Nom) 1
}
}
}
foreach Nom $ListeDesPABs {
foreach Table $LesNomsDesTables Couleur $LesCouleursDesTables {
if {[info exists ${Table}($Nom)]} {
if {$Couleur != "green"} {
lappend LesPointes $Nom
lappend LesPointes $Couleur
}
break
}
}
}
AiguilleLaListe $LesPointes $K "UneListeEnPlus" "milieu" $Interieur $Exterieur
return $K
}
proc RosaceDesGCSkew {Type {K ""} {Interieur ""} {Exterieur ""}} {
global RepertoireDuGenome
global ListeDeBoites
global ListeDesPABs
global RosaceCourante
global CurrentGenome
if {$K==""} {
if { ! [info exists RosaceCourante]} {
RscopeBoard $CurrentGenome
}
set K $RosaceCourante
}
if {$Interieur==""} {
set Interieur 0.70
set Exterieur 0.74
}
if { ! [info exists ListeDeBoites]} { ChargeListeDeBoites }
foreach Boite $ListeDeBoites {
set Nom [Box $Boite nom]
if {[regexp "GLIMMER" $Nom]} { continue }
set GC [CompositionEn GC $Nom]
if { $GC == "" } {
set Couleur "white"
} else {
set Couleur [QuelInterval $GC [LesSeuilsGC] [CouleursDuRougeAuBleu 5]]
}
lappend LesPointes $Nom
lappend LesPointes $Couleur
}
AiguilleLaListe $LesPointes $K "UneListeEnPlus" "milieu" $Interieur $Exterieur
return $K
}
proc ShowNucRosace {K X Y Action {PositionNucleique 0}} {
global ADN TDN RAC
global OldX OldADN OldTDN OldPosD OldPosG OldLigne
global RectangleDeSelectionNucleique
global xDebutRectangleDeSelectionNucleique
global yDebutRectangleDeSelectionNucleique
global xFinRectangleDeSelectionNucleique
global yFinRectangleDeSelectionNucleique
global xMinCercleDeSelectionNucleique
global yMinCercleDeSelectionNucleique
global xMaxCercleDeSelectionNucleique
global yMaxCercleDeSelectionNucleique
global DebutAngleDeSelectionNucleique
global FinAngleDeSelectionNucleique
global ParametresDuBoard
global PremiereMotion
global JeChargeADNduCalme
global CouleurArcDeZone
global OldRayonJaune
if { [info exists JeChargeADNduCalme] } { return }
if { ! [info exists ADN]} {
set JeChargeADNduCalme 1
ChargeADNetTDNetRAC
unset JeChargeADNduCalme
}
set PI 3.14159
set x [$K canvasx $X]
set y [$K canvasy $Y]
set xFin [set ParametresDuBoard($K,xFin)]
set CentreX [set ParametresDuBoard($K,CentreX)]
set CentreY [set ParametresDuBoard($K,CentreY)]
if {$PositionNucleique > 0} {
set Angle [expr $PositionNucleique*(2*$PI)/$xFin]
set PositionSurADN $PositionNucleique
} else {
set Angle [HeureDansRosace $K $X $Y]
set PositionSurADN [expr round($xFin*$Angle/(2*$PI))]
}
if { $Action == "Point" } {
set PremiereMotion($K) 1
set xDebutRectangleDeSelectionNucleique($K) $PositionSurADN
set DebutAngleDeSelectionNucleique($K) [expr ([DecalageAngulaireRosace] + $PI/2 - $Angle)*180./$PI]
set RayonJaune [RayonDansRosace $K $X $Y]
if {[info exists OldRayonJaune] && [expr abs($RayonJaune-$OldRayonJaune)/$RayonJaune < 0.05]} {
set RayonJaune $OldRayonJaune
}
set OldRayonJaune $RayonJaune
set xMinCercleDeSelectionNucleique($K) [expr $CentreX-$RayonJaune]
set yMinCercleDeSelectionNucleique($K) [expr $CentreY-$RayonJaune]
set xMaxCercleDeSelectionNucleique($K) [expr $CentreX+$RayonJaune]
set yMaxCercleDeSelectionNucleique($K) [expr $CentreY+$RayonJaune]
}
if {[info exists OldLigne($K)]} {
catch {$K delete [set OldADN($K)]}
catch {$K delete [set OldTDN($K)]}
catch {$K delete [set OldPosD($K)]}
catch {$K delete [set OldPosG($K)]}
catch {$K delete [set OldLigne($K)]}
unset OldLigne($K)
if { $PositionNucleique == 0 && $X == [set OldX($K)] } { return }
}
set i $PositionSurADN
set Orient "Inconnue"
set BoiteTouchee [BoiteDuCourant $K $X $Y]
if { $BoiteTouchee != "" } {
if { [expr $i < ([Box $BoiteTouchee debut]+[Box $BoiteTouchee fin])/2]} {
set i [Box $BoiteTouchee debut]
} else {
set i [expr [Box $BoiteTouchee fin]+1]
}
set x [PositionCanvaActuelleX $K $i]
set y [expr $y-30]
set Orient [Box $BoiteTouchee orient]
}
set ZoneADN [string range $ADN [expr $i-20] [expr $i+19]]
set ZoneTDN [string range $TDN [expr $i-20] [expr $i+19]]
set PositionD [format " %4.4d" $i]
set PositionG [format "%4.4d " [expr $i-1]]
set Fonte {Courier 8}
set OldX($K) $X
if { $Orient != "R" } {
set OldADN($K) [$K create text [expr $x] [expr $y-10] \
-text $ZoneADN -font $Fonte -anchor center]
}
if { $Orient != "F" } {
set OldTDN($K) [$K create text [expr $x] [expr $y+10] \
-text $ZoneTDN -font $Fonte -anchor center]
}
set OldPosD($K) [$K create text $x [expr $y] -text $PositionD -font $Fonte -anchor w]
set OldPosG($K) [$K create text $x [expr $y] -text $PositionG -font $Fonte -anchor e]
set OldLigne($K) [$K create line $CentreX $CentreY $x $y]
if { $Action == "Motion" } {
if { ! [set PremiereMotion($K)]} {
if {[info exists RectangleDeSelectionNucleique($K)]} {
$K delete [set RectangleDeSelectionNucleique($K)]
}
}
set PremiereMotion($K) 0
set xFinRectangleDeSelectionNucleique($K) $PositionSurADN
set FinAngleDeSelectionNucleique($K) [expr ([DecalageAngulaireRosace] + $PI/2 - $Angle)*180./$PI]
set Start [set DebutAngleDeSelectionNucleique($K)]
set Extent [expr [set FinAngleDeSelectionNucleique($K)] - $Start]
if {[info exists CouleurArcDeZone]} {
set CouleurArc $CouleurArcDeZone
set Epaisseur 7
set LesTags {}
} else {
set CouleurArc "yellow"
set Epaisseur 3
set LesTags [list "SelectionNucleique"]
}
set RectangleDeSelectionNucleique($K) [$K create arc \
[set xMinCercleDeSelectionNucleique($K)] \
[set yMinCercleDeSelectionNucleique($K)] \
[set xMaxCercleDeSelectionNucleique($K)] \
[set yMaxCercleDeSelectionNucleique($K)] \
-start $Start \
-extent $Extent \
-style "arc" \
-outline $CouleurArc \
-width $Epaisseur \
-tags $LesTags]
return [set RectangleDeSelectionNucleique($K)]
}
}
proc CreeLesTables {Source Orga Extension} {
set LesTables {"tout_le_monde" "toutes_euryarks" "manque_euryarks" "no_ark" "pyro_specif"}
set LesTables {"tout_le_monde"}
foreach Table $LesTables {
CreeLaTable $Table $Source $Orga $Extension
}
}
proc CreeLaTableDuTamis {{Tam ""} {Source ""} {Orga ""} {Extension ""}} {
if {$Tam==""} { set Tam [ChoisisUnTamis "ChampNom" "AvecNewTamis"] }
set Tam [CreeLeTasTamis $Tam]
if {$Tam==""} { return "" }
CreeLaTable "TasTamis_$Tam" $Source $Orga $Extension
}
proc CreeLaTable {CommeCa {Source ""} {Orga ""} {Extension ""}} {
global RepertoireDuGenome
global NotreOS
global NotreOrga
global TasTamis
Wup "On peut avoir comme source distancesphylo ou psclustalw"
if {$Source==""} { set Source "distancesphylo" }
if {$Orga==""} { set Orga $NotreOrga }
if {$Extension==""} { set Extension ".$Orga" }
Wup "Devrait etre le meme que dans LesSpecifiquesDansDistancePhylo"
set SeuilDistance 82
set SeuilPIC 20
Wup "On en repeche car il existent dans TBlastN mais pas dans le proteome de phor"
set ARepecher "ABY0341 ABY7428 ABY3419 ABY7435 ABY3433"
regsub {\$} $CommeCa "" Titre
regsub {\^} $Titre "" Titre
regsub " " $Titre "" Titre
regsub "TasTamis_" $Titre "" Titre
foreach Ligne [LesOrganismesImportantsPourDBClustal] {
scan $Ligne "%s %s" Genre Espece
set Complet "$Genre $Espece"
set Organisme [Glossaire $Complet Court]
set OrgaInteressant($Organisme) 1
}
catch {unset OrgaInteressant([Glossaire $Orga Court])}
catch {unset OrgaInteressant(nmen)}
set FichierPIClustalw "$RepertoireDuGenome/fiches/piclustalw$Extension"
while { ! [file exists $FichierPIClustalw]} {
if {[OuiOuNon "$FichierPIClustalw doesn't exist\Do I create it now ? (it will take a while)."]} {
CreeLesFichiersPIClustalwEtPSClustalw $Orga $Extension
}
}
foreach Ligne [LesLignesDuFichier $FichierPIClustalw] {
set Liste [split $Ligne " "]
set Nom [lindex $Liste 0]
set ListeOrgaPIC [lrange $Liste 1 end]
if {[regexp $Nom $ARepecher]} {
set ListeOrgaPIC [linsert $ListeOrgaPIC 0 100]
set ListeOrgaPIC [linsert $ListeOrgaPIC 0 phor]
}
foreach {Orga PI} $ListeOrgaPIC {
if {[info exists PIC($Nom,$Orga)]} { continue }
set PIC($Nom,$Orga) $PI
}
}
if {$Source=="distancesphylo"} {
set FichierDistancesPhylo "$RepertoireDuGenome/fiches/distancesphylo$Extension"
if { ! [file exists $FichierDistancesPhylo]} {
FaireLire "$FichierDistancesPhylo\nNous y voila"
set FichierDistancesPhylo [CreeDistancesPhyloAvecLesMSFs [Glossaire $NotreOS Court] [PreFixe]]
}
}
if {$Source=="psclustalw"} {
set FichierDistancesPhylo "$RepertoireDuGenome/fiches/psclustalw$Extension"
set MaxiPS -9999.
foreach Ligne [LesLignesDuFichier $FichierDistancesPhylo] {
scan $Ligne "%s %s %f" Nom Orga PS
set MaxiPS [Maxi $PS $MaxiPS]
}
set CoeffPSversDistance [expr 100./$MaxiPS]
set OffsetPSversDistance 0
}
set NombreDeLignesRejetees 0
foreach Ligne [LesLignesDuFichier $FichierDistancesPhylo] {
set Liste [split $Ligne " "]
set Nom [lindex $Liste 0]
set ListeOrgaDistance [lrange $Liste 1 end]
# if {[regexp $Nom $ARepecher]} {
# set ListeOrgaDistance [linsert $ListeOrgaDistance 0 $MaxiPS]
# set ListeOrgaDistance [linsert $ListeOrgaDistance 0 phor]
# }
set NouvelleListeOrgaDistance {}
set LesHonnetes {}
catch { unset DejaVuCetOrga }
foreach {Orga Distance Access} $ListeOrgaDistance {
if {$Source=="psclustalw"} {
set Distance [expr $CoeffPSversDistance*$Distance + $OffsetPSversDistance]
}
if {[info exists DejaVuCetOrga($Nom,$Orga)]} { continue }
if {[info exists PIC($Nom,$Orga)]} {
if {[set PIC($Nom,$Orga)] < $SeuilPIC } { continue }
} else {
if {$Distance > $SeuilDistance} { continue }
}
set DejaVuCetOrga($Nom,$Orga) 1
lappend LesHonnetes $Orga
lappend LesHonnetes $Distance
if { ! [info exists OrgaInteressant($Orga)] } { continue }
lappend NouvelleListeOrgaDistance $Orga
lappend NouvelleListeOrgaDistance $Distance
lappend NouvelleListeOrgaDistance $Access
}
set YaUneBactos 0
foreach {Orga Distance Access} $NouvelleListeOrgaDistance {
if { ! [PyroLike $Orga]} {
set YaUneBactos 1
break
}
}
if { $NouvelleListeOrgaDistance == {} || $CommeCa == "no_ark" && ! $YaUneBactos } {
lappend LesRejetes $Ligne
incr NombreDeLignesRejetees
continue
}
set AncienneLigne($Nom) "$Nom [join $LesHonnetes " "]"
lappend NouvellesLignes "$Nom [join $NouvelleListeOrgaDistance " "]"
}
SauveLesLignes $NouvellesLignes dans "$FichierDistancesPhylo.$Titre"
set NombreDePhylosRetenus 0
set MaxPlace 0
set ListeDesOrgas {}
set LesRetenus {}
foreach Ligne $NouvellesLignes {
set Liste [split $Ligne " "]
set Nom [lindex $Liste 0]
set ToutesLesEuryArks \
[expr [regexp "phor" $Ligne] \
&& [regexp "pfur" $Ligne] \
&& ( ! [info exists AutreOrganismeDeReference] || [regexp "paby" $Ligne]) \
&& [regexp "mjan" $Ligne] \
&& [regexp "mthe" $Ligne] \
&& [regexp "aful" $Ligne] \
]
if { $CommeCa == "toutes_euryarks" && ! $ToutesLesEuryArks } { continue }
if { $CommeCa == "manque_euryarks" && $ToutesLesEuryArks } { continue }
set NoEuryArk \
[expr ! [regexp "mjan" $Ligne] \
&& ! [regexp "mthe" $Ligne] \
&& ! [regexp "aful" $Ligne] \
]
if { $CommeCa == "no_euryark" && ! $NoEuryArk } { continue }
set NoArk \
[expr ! [regexp "mjan" $Ligne] \
&& ! [regexp "mthe" $Ligne] \
&& ! [regexp "aful" $Ligne] \
&& ! [regexp "aper" $Ligne] \
&& ! [regexp "ssol" [set AncienneLigne($Nom)]] \
&& ! [regexp "hsal" [set AncienneLigne($Nom)]] \
]
if { $CommeCa == "no_ark" && ! $NoArk } { continue }
if { [regexp "TasTamis" $CommeCa] && ! [info exists TasTamis($Nom)] } { continue }
incr NombreDePhylosRetenus
lappend LesRetenus $Ligne
set SC [SuperClasse [ClasseFonctionnelle $Nom]]
if {[info exists Cumul($SC)]} {
incr Cumul($SC)
} else {
set Cumul($SC) 1
}
set ListeOrgaDistance [lrange $Liste 1 end]
set Place 0
catch {unset DejaVuDansCetteListe}
set NomOrgasDuPAB $Nom
foreach {Orga Distance Access} $ListeOrgaDistance {
if { ! [info exists DejaVu($Orga)] } {
set DejaVu($Orga) 1
if {[info exists CumulDesDistances($Orga)]} {
incr CumulDesDistances($Orga) $Distance
incr NombreDeDistancesCumulees($Orga)
} else {
set CumulDesDistances($Orga) $Distance
set NombreDeDistancesCumulees($Orga) 1
}
lappend ListeDesOrgas $Orga
}
if {[info exists DejaVuDansCetteListe($Orga)]} { continue }
lappend ListeNomOrgaDistanceDesPABs "$Nom $Orga $Distance"
append NomOrgasDuPAB " $Orga"
set DejaVuDansCetteListe($Orga) 1
incr Place
set MaxPlace [Maxi $MaxPlace $Place]
if {0 && $Place > 15} { continue }
set Place [Mini $Place 15]
if { ! [info exists CumulOrgaPlace($Orga,$Place)]} {
set CumulOrgaPlace($Orga,$Place) 0
}
incr CumulOrgaPlace($Orga,$Place)
}
set GrosseDefinition "[Definition $Nom]"
# Espionne "[string range $GrosseDefinition 0 60] $NomOrgasDuPAB"
lappend ListeNomOrgas $NomOrgasDuPAB
}
Espionne "$NombreDeLignesRejetees PAB rejetes"
Espionne "$NombreDePhylosRetenus PAB retenus"
Wup "Mettre 10 pour ne garder que les 10 premieres par ex."
set nColonnes 12
set MaxPlace [Mini $MaxPlace $nColonnes]
set ListeOrgaEtSesPlaces {}
foreach Orga $ListeDesOrgas {
set LesPlaces {}
set SesPlaces ""
set CumulDM 0
set CumulMM 0
set CumulM 0
for {set Place 1} {$Place<=$MaxPlace} {incr Place} {
if {[info exists CumulOrgaPlace($Orga,$Place)]} {
set COP [set CumulOrgaPlace($Orga,$Place)]
lappend LesPlaces $COP
incr CumulDM [expr $Place*$COP*$COP]
incr CumulMM [expr $COP*$COP]
incr CumulM $COP
} else {
lappend LesPlaces -1
}
}
Wup "On affiche le % si 1 ou le # de fois si 0 "
set OnVeutPourcentage 0
set Tab " "
Wup "Nombre de fois mini ou orga doit apparaitre pour etre significatif"
set MiniCumulM 1
if { $CumulM < $MiniCumulM } { continue }
foreach Place $LesPlaces {
set PP [Maxi [expr ($Place*100)/$CumulM] 0]
if { $Place > 0 } {
if {$OnVeutPourcentage} {
append SesPlaces [format "$Tab%4d" $PP]
} else {
append SesPlaces [format "$Tab%4d" $Place]
}
} else {
append SesPlaces "$Tab "
}
}
# set SesPlaces [string trimright $SesPlaces]
set MoyenneDesDistances [expr [set CumulDesDistances($Orga)]/[set NombreDeDistancesCumulees($Orga)]]
set SesPlaces "$SesPlaces $MoyenneDesDistances"
set PlacePreferee [expr (1.0*$CumulDM)/$CumulMM]
set BellePlacePreferee [format "%5.1f" $PlacePreferee]
set BelOrga [format "%-16s" [string range [Glossaire $Orga Pointe] 0 15]]
set OrgaCentreEtSesPlaces "$BellePlacePreferee $BelOrga $SesPlaces"
lappend ListeOrgaEtSesPlaces $OrgaCentreEtSesPlaces
}
set ListeTriee [lsort -command CompareLesFloatsEnDebut $ListeOrgaEtSesPlaces]
set BonneListeTriee {}
foreach Ligne $ListeTriee {
lappend BonneListeTriee [string range $Ligne 6 end]
}
Espionne [join $BonneListeTriee "\n"]
set Resume "Ordre "
foreach Ligne $BonneListeTriee {
scan $Ligne "%s" OrgaPointe
set Orga [Glossaire $OrgaPointe Court]
if {[regexp "M.thermoauto" $OrgaPointe]} { set Orga "mthe" }
if {[regexp "nmen" $Orga]} { continue }
append Resume " $Orga"
}
Espionne [string range $Resume 0 100]
# foreach SC [LesSuperClassesDansLOrdre] {
# if { ! [info exists Cumul($SC)]} { continue }
# if {[regexp "RR|tR" $SC]} { continue }
# set HistoDuSC [format "%4d %4.1f%% %s" [set Cumul($SC)] [expr [set Cumul($SC)]*100./$NombreDePhylosRetenus] $SC]
# Espionne $HistoDuSC
# lappend HistoDesSC $HistoDuSC
# }
set FichierOrgaEtSesPlaces "$RepertoireDuGenome/fiches/orgaetsesplaces.$Titre"
if {[file exists $FichierOrgaEtSesPlaces]} {
if { ! [OuiOuNon "$FichierOrgaEtSesPlaces\nalready exists. Do I replace it ?"]} {
set FichierOrgaEtSesPlaces [FichierPourSaveAs "$FichierOrgaEtSesPlaces"]
}
}
if {$FichierOrgaEtSesPlaces!=""} {
Espionne [SauveLesLignes $BonneListeTriee dans $FichierOrgaEtSesPlaces]
}
set FichierPABRetenus "$RepertoireDuGenome/fiches/pabretenus.$Titre"
if {[file exists $FichierPABRetenus]} {
if { ! [OuiOuNon "$FichierPABRetenus\nalready exists. Do I replace it ?"]} {
set FichierPABRetenus [FichierPourSaveAs "$FichierPABRetenus"]
}
}
if {$FichierPABRetenus!=""} {
Espionne [SauveLesLignes $LesRetenus dans $FichierPABRetenus]
}
# Espionne [SauveLesLignes $HistoDesSC dans "$RepertoireDuGenome/fiches/superclasses.$Titre"]
# Espionne [SauveLesLignes $LesRejetes dans "$RepertoireDuGenome/fiches/pabrejetes.$Titre"]
}
proc CocheDansLaListe {Liste {CocheParDefaut {}}} {
global retourCoche
global VariableAssociee
set w [NomDe coche]
catch {destroy $w}
toplevel $w
wm title $w "Merci de cocher ..."
wm iconname $w "Coche"
frame $w.buttons
pack $w.buttons -side bottom -fill x -pady 2m
button $w.buttons.dismiss -text "Dismiss" -background red -foreground white \
-command "set retourCoche($w) Dismiss"
pack $w.buttons.dismiss -side left -expand 1
button $w.buttons.defaut -text "Default" -background yellow -foreground black \
-command "set retourCoche($w) Defaut"
pack $w.buttons.defaut -side left -expand 1
button $w.buttons.accept -text "Accept" -background green -foreground black \
-command "set retourCoche($w) Accept"
pack $w.buttons.accept -side left -expand 1
set d 0
set i 0
foreach a $Liste d $CocheParDefaut {
if {$d==""} { set d 0 }
set VariableAssociee($a) $d
set b $w.b[incr i]
checkbutton $b -text "$a" -variable VariableAssociee($a) -relief flat
pack $b -side top -pady 2 -anchor w
}
tkwait variable retourCoche($w)
if { [set retourCoche($w)] == "Defaut" } {
foreach a $Liste d $CocheParDefaut {
if {$d==""} { set d 0 }
set VariableAssociee($a) $d
}
while { [set retourCoche($w)] == "Defaut" } {
unset retourCoche($w)
tkwait variable retourCoche($w)
}
}
if { [set retourCoche($w)] != "Dismiss" } {
set LesChoisis {}
foreach a $Liste {
if {[set VariableAssociee($a)]} {
lappend LesChoisis $a
}
}
}
unset retourCoche($w)
destroy $w
return $LesChoisis
}
proc TousLesMiniBootstrap {} {
global RepertoireDuGenome
foreach FichierPhylo [glob "$RepertoireDuGenome/bootstrap/*"] {
MiniBootstrap $FichierPhylo
}
}
proc MiniBootstrap FichierPhylo {
global ListeDistanceDeChaqueFeuille
global Cible
global MiniOuSomme
set Cible [file tail $FichierPhylo]
set MiniOuSomme "Mini"
set Arbre [ArbreBootstrapEnListe [ContenuDuFichier $FichierPhylo]]
set ListeDistanceDeChaqueFeuille {}
AppendEtRetourneDistance $Arbre "Inconnue"
puts "\n$Cible"
puts [join $ListeDistanceDeChaqueFeuille "\n"]
}
proc AiguilleLaListe {ListeNomCouleur K Type {Po ""} {Min ""} {Max ""}} {
if { ! [regexp "EnPlus$" $Type]} {
foreach Id [$K find withtag $Type] {
$K delete $Id
}
} else {
regsub "EnPlus$" $Type "" Type
}
foreach {Nom Couleur} $ListeNomCouleur {
Aiguille $Nom $Couleur $K $Type $Po $Min $Max
}
}
proc Aiguille {Nom Couleur K Type {MilieuOuAngle "milieu"} {RapportAuRayonMin 0.1} {RapportAuRayonMax 0.7}} {
global ParametresDuBoard
global LesAutresTagsPourAiguilles
set PI 3.14159
set xFin [set ParametresDuBoard($K,xFin)]
set CentreX [set ParametresDuBoard($K,CentreX)]
set CentreY [set ParametresDuBoard($K,CentreY)]
set RayonMoyen [set ParametresDuBoard($K,RayonMoyen)]
set OffsetRayonMin [set ParametresDuBoard($K,OffsetRayonMin)]
set OffsetRayonMax [set ParametresDuBoard($K,OffsetRayonMax)]
set RayonMin [expr $RayonMoyen*$RapportAuRayonMin]
set RayonMax [expr $RayonMoyen*$RapportAuRayonMax]
if {$Type == "Zero" } {
set Angle [expr $PI/2]
set RayonMax $RayonMoyen
} else {
if { $MilieuOuAngle == "angle" } {
set Angle $Nom
} elseif { $MilieuOuAngle == "milieu"} {
set Debut [Box $Nom debut]
set Fin [Box $Nom fin]
set Milieu [expr ($Debut+$Fin)/2]
if {$Type=="RepereBox"} {
set Orient [Box $Nom orient]
if {$Orient == "F"} { set Sens 1 } else { set Sens -1 }
set RayonMax [expr $RayonMoyen+$Sens*($OffsetRayonMin+$OffsetRayonMax)/2]
}
set Angle [expr [DecalageAngulaireRosace] + 3.14159/2 - $Milieu*2*3.14159/$xFin]
} else {
FaireLire "Illegal\nJeMeSignale"
return
}
}
set PosMinX [PositionCanvaActuelleX $K [expr $CentreX+$RayonMin*cos($Angle)]]
set PosMinY [PositionCanvaActuelleY $K [expr $CentreY-$RayonMin*sin($Angle)]]
set PosMaxX [PositionCanvaActuelleX $K [expr $CentreX+$RayonMax*cos($Angle)]]
set PosMaxY [PositionCanvaActuelleY $K [expr $CentreY-$RayonMax*sin($Angle)]]
if {$Type == "RepereBox"} {
set Couleur "black"
$K create text $PosMinX $PosMinY -text $Nom -anchor c -tag "Txt $Type"
}
set BindBouton3 0
set LesTags [list "Aiguille" "$Type"]
if {[info exists LesAutresTagsPourAiguilles]} {
set LesTags [concat $LesTags $LesAutresTagsPourAiguilles]
if {[set i [lsearch $LesAutresTagsPourAiguilles "RosaceArcEnCiel"]] >= 0} {
set Tag [lindex $LesAutresTagsPourAiguilles 1]
set BindBouton3 1
}
}
$K create line $PosMinX $PosMinY $PosMaxX $PosMaxY -fill $Couleur -tag $LesTags
if {$BindBouton3} {
$K bind "$Tag" <3> "ManipuleLaRosace Point $K $Tag %x %y"
$K bind "$Tag" "ManipuleLaRosace Release $K $Tag %x %y"
$K bind "$Tag" "ManipuleLaRosace Switch $K $Tag %x %y"
}
}
proc CreeLesFichiersDesShineDalgarnoDesPABs {{Motif ""} {Liste ""} {Rendre ""}} {
global RepertoireDuGenome
global ListeDesPABs
global NotreOC
global MotifShineDalgarno
if {$Liste==""} { set Liste [ListeDesPABs] }
set RendreLeMotif 0
if {$Motif=="LeMotifMerci"} {
set RendreLeMotif 1
set Motif ""
}
if {$Motif=="" && [info exists MotifShineDalgarno]} {
set Motif $MotifShineDalgarno
}
if {$Motif==""} {
if {[regexp -nocase "Archaea" $NotreOC]} {
set Motif "GGT"
}
if {[regexp -nocase "Bacteria" $NotreOC]} {
set Motif "GGA"
}
while {$Motif==""} {
if {[OuiOuNon "Do you known the main motif (GGT or GGA or ??? ) for the ShineDalgarno sequence ?"]} {
set Motif [string toupper [Entre]]
if {[regexp -nocase {[^ATGC]} $Motif]} {
FaireLire "$Motif seems to be wrong (use A,T,G, and C)"
set Motif ""
continue
}
} else {
if {[OuiOuNon "I'll stop this procedure ?"]} { return "" }
}
}
}
if { ! [info exists MotifShineDalgarno]} { set MotifShineDalgarno $Motif }
if {$RendreLeMotif} { return $Motif }
if { ! [info exists ListeDesPABs]} { ChargeLesPABs }
set Avant 18
set TropLoin $Avant
set TropPres 6
set LesSansSD {}
set LesLoinSD {}
set LesMetsSD {}
set LesBonsSD {}
foreach Boite $Liste {
set Nom [Box $Boite nom]
set Debut [Box $Boite debut]
set Fin [Box $Boite fin]
set Orient [Box $Boite orient]
if {$Orient == "F"} {
set Seq [BoutADN [expr $Debut-$Avant] [expr $Debut+2] $Orient]
set SeqMet [BoutADN [expr $Debut-$Avant] [expr $Debut+11] $Orient]
set iOldMet $Avant
} else {
set Seq [BoutADN [expr $Fin-2] [expr $Fin+$Avant] $Orient]
set SeqMet [BoutADN [expr $Fin-11] [expr $Fin+$Avant] $Orient]
set iOldMet $Avant
}
set lSeq [string length $Seq]
set iGGT [string last $Motif $Seq]
set PosGGT [expr $iGGT-$lSeq]
if {$iGGT < 0} {
lappend LesSansSD "$Nom"
continue
}
if {[expr $lSeq-$iGGT] > $TropLoin} {
lappend LesLoinSD "$Nom [string range $SeqMet $iGGT end]"
continue
}
while {$iGGT >= 0 && [expr $lSeq-$iGGT] < $TropPres} {
set iGGT [string last $Motif [incr iGGT -1]]
}
if {$iGGT>=0} {
lappend LesBonsSD "$Nom"
continue
}
Wup "Beginning again at farest iGGT, we try to find a better start codon"
set iGGT [string last $Motif $Seq]
set iNewMet $iOldMet
for {set i [expr $iOldMet+3]} {$i < [string length $SeqMet]} {incr i 3} {
if {[CodonStartPossible [string range $SeqMet $i [expr $i+2]]]} {
set iNewMet $i
}
}
set iGGT [string first $Motif $Seq]
set AfficheSeq [string range $SeqMet $iGGT end]
if {$iNewMet != $iOldMet} {
set AfficheSeq [string range $SeqMet $iGGT [expr $iOldMet-1]]
append AfficheSeq [string tolower [string range $SeqMet $iOldMet [expr $iOldMet+2]]]
append AfficheSeq [string range $SeqMet [expr $iOldMet+3] [expr $iNewMet-1]]
append AfficheSeq [string tolower [string range $SeqMet [expr $iNewMet] [expr $iNewMet+2]]]
append AfficheSeq [string range $SeqMet [expr $iNewMet+3] end ]
lappend LesMetsSD "$Nom $AfficheSeq"
} else {
set AfficheSeq [string range $SeqMet $iGGT [expr $iOldMet-1]]
append AfficheSeq [string tolower [string range $SeqMet $iOldMet [expr $iOldMet+2]]]
append AfficheSeq [string range $SeqMet [expr $iOldMet+3] end ]
lappend LesBonsSD "$Nom $AfficheSeq"
}
}
if {$Rendre=="RendreLesListes"} {
return [list $LesBonsSD $LesSansSD $LesLoinSD $LesMetsSD]
}
if {$Rendre=="RendreEtat"} {
set Pos [expr $]
if {$LesBonsSD!={}} { return "ok $PosGGT" }
if {$LesSansSD!={}} { return "no $PosGGT" }
if {$LesLoinSD!={}} { return "far $PosGGT" }
if {$LesMetsSD!={}} { return "met $PosGGT" }
return ""
}
Espionne [SauveLesLignes $LesSansSD dans "$RepertoireDuGenome/fiches/sd_sans"]
Espionne [SauveLesLignes $LesLoinSD dans "$RepertoireDuGenome/fiches/sd_loin"]
Espionne [SauveLesLignes $LesMetsSD dans "$RepertoireDuGenome/fiches/sd_mets"]
Espionne [SauveLesLignes $LesBonsSD dans "$RepertoireDuGenome/fiches/sd_bons"]
}
proc MontreLesSD {} {
global RepertoireDuGenome
global ListeDesPABs
if { ! [info exists ListeDesPABs]} { ChargeLesPABs }
foreach Nom $ListeDesPABs {
puts [ShineDalgarno $Nom]
}
}
proc ShineDalgarno {Nom {Format "raw"}} {
global RepertoireDuGenome
global ShineDalgarno
set Nice(sans) "ShineDalgarno : not found"
set Nice(bons) "ShineDalgarno : ok"
set Nice(mets) "ShineDalgarno : too close ... better with next start codon"
set Nice(loin) "ShineDalgarno : too far"
set Nice(invalide) ""
if {[info exists ShineDalgarno]} {
set SD "invalide"
if {[info exists ShineDalgarno($Nom)]} {
set SD [set ShineDalgarno($Nom)]
}
if {$Format=="Nice"} {
set Sequence ""
scan $SD "%s %s" Etat Sequence
set SD [string trim "[set Nice($Etat)] $Sequence"]
}
return $SD
}
foreach NomDuFichier {"sd_bons" "sd_loin" "sd_mets" "sd_sans"} {
set Fichier "$RepertoireDuGenome/fiches/$NomDuFichier"
if { ! [file exists $Fichier]} { continue }
foreach Ligne [LesLignesDuFichier $Fichier] {
scan $Ligne "%s" NomLu
set Etat [lindex [split $NomDuFichier "_"] 1]
set Seq [StringSuivant " " dans $Ligne]
set ShineDalgarno($NomLu) "$Etat $Seq"
}
}
set ShineDalgarno(Bidon) "EstCharge"
return [ShineDalgarno $Nom $Format]
}
proc InformeLesClasses {} {
global RepertoireDuGenome
global ListeDesPABs
global InformeSansDemander
set InformeSansDemander 1
if { ! [info exists ListeDesPABs]} { ChargeLesPABs }
foreach Ligne [LesLignesDuFichier "$RepertoireDuGenome/fiches/classes"] {
scan $Ligne "%s %s %s" Nom AA Classe
set Classes($Nom) $Classe
}
foreach Nom $ListeDesPABs {
Informe $Nom "Class: [set Classes($Nom)]"
}
}
proc AfficheLesConcernesDeCeRang {K X Y Fichier} {
global RepertoireDuGenome
global NotreOS
global PABRetenus
Wup "if K is an Organism then return LesAtteints (for PourGif)"
if {[regexp {^\.} $K]} {
set PourGif 0
} else {
set PourGif 1
}
regsub "orgaetsesplaces" $Fichier "distancesphylo.[Glossaire $NotreOS Court]" FichierDPh
regsub "orgaetsesplaces" $Fichier "pabretenus" FichierDesRetenus
set TailFDR [file tail $FichierDesRetenus]
if { ! [info exists PABRetenus($TailFDR)] && [file exists $FichierDesRetenus]} {
set PABRetenus($TailFDR) 1
foreach Ligne [LesLignesDuFichier $FichierDesRetenus] {
scan $Ligne "%s" Nom
set PABRetenus($TailFDR,$Nom) 1
}
}
if { ! [file exists $FichierDPh]} {
FaireLire "I can't find $FichierDPh"
return ""
}
if {$PourGif} {
set Orga [Glossaire $K Court]
set Score $X
set Rang $Y
set Rep ""
} else {
set Id [$K find withtag current]
set Orga [Glossaire [lindex [$K gettags $Id] 0] Court]
set Score [lindex [$K gettags $Id] 1]
set Rang [lindex [$K gettags $Id] 2]
set Rep "$RepertoireDuGenome/"
}
set LesAtteints {}
foreach Ligne [LesLignesDuFichier $FichierDPh] {
set LesMots [split $Ligne " "]
set Nom [lindex $LesMots 0]
set Ieme [lsearch -exact $LesMots $Orga]
if { [expr ($Ieme-1)/3] == [expr $Rang-1] } {
if { ! [info exists PABRetenus($TailFDR)] || \
[info exists PABRetenus($TailFDR)] && [info exists PABRetenus($TailFDR,$Nom)]} {
lappend LesAtteints "${Rep}msf/$Nom $Ligne"
}
}
}
if {$PourGif} { return $LesAtteints }
if {[llength $LesAtteints]>0} {
AfficheVariable [join $LesAtteints "\n"] "AvecShowSansFetch"
} else {
FaireLire "Sorry I can't find the associated alignments ... I'm so messy ..."
}
}
proc DemandeEtDessineOrgaEtSesPlaces {} {
global RepertoireDuGenome
Gs "Canvas"
set Generique "orgaetsesplaces."
set iGenerique [string length $Generique]
set LesOrgasPossibles {}
foreach Fichier [glob -nocomplain "$RepertoireDuGenome/fiches/$Generique*"] {
set Orga [string range [file tail $Fichier] $iGenerique end]
lappend LesOrgasPossibles $Orga
}
set Orga [ChoixParmi $LesOrgasPossibles]
set Fichier "$RepertoireDuGenome/fiches/$Generique$Orga"
if { ! [file exists $Fichier]} { return }
DessineOrgaEtSesPlaces $Fichier
}
proc CopieLesBonsDisphy {} {
global RepertoireDuGenome
foreach Nom [ListeDesPABs] {
set PhyFaux "$RepertoireDuGenome/phylos.faux/$Nom"
set PhyBon "$RepertoireDuGenome/phylos/$Nom"
set DisFaux "$RepertoireDuGenome/disphy.faux/$Nom"
set DisBon "$RepertoireDuGenome/disphy/$Nom"
if { ! [file exists $PhyFaux]} { continue }
if {[ContenuDuFichier $PhyFaux]==[ContenuDuFichier $PhyBon]} {
if { ! [file exists $DisFaux]} { continue }
File copy $DisFaux $DisBon
continue
}
}
}
proc CreeDistancesPhyloAvecLesMSFs {{ReferenceVoulue ""} {Extension ""}} {
global RepertoireDuGenome
global ListeDesPABs
global NotreOS
if {$ReferenceVoulue == ""} { set ReferenceVoulue [Glossaire $NotreOS Court] }
if {$Extension == ""} { set Extension ".$ReferenceVoulue" }
set ReferenceVoulue [string toupper $ReferenceVoulue]
if { ! [info exists ListeDesPABs]} { ChargeLesPABs }
set KeepDisphy 1
set SauveDansDisphy 1
set NotreOsEstLaReference 0
if {[string toupper $ReferenceVoulue] == [string toupper [Glossaire $NotreOS Court]]} {
set NotreOsEstLaReference 1
set DisphyDir "$RepertoireDuGenome/disphy"
if { ! [file exists $DisphyDir]} { File mkdir $DisphyDir }
set SauveDansDisphy 1
if {[llength [glob -nocomplain "$DisphyDir/*"]] > 0} {
set KeepDisphy [OuiOuNon "Some files already exist in $DisphyDir\nDo I keep them ? "]
}
}
set FichierDistancesPhylo "$RepertoireDuGenome/fiches/distancesphylo$Extension"
while {[file exists $FichierDistancesPhylo]} {
if {[OuiOuNon "$FichierDistancesPhylo\n already exists. Do I replace it ? " 0]} {
File delete $FichierDistancesPhylo
} else {
if {[OuiOuNon "Do I append to it ? "]} {
foreach Ligne [LesLignesDuFichier $FichierDistancesPhylo] {
scan $Ligne "%s" Nom
set DejaVu($Nom) 1
}
break
} else {
if {[OuiOuNon "Do I cancel ? "]} { return "" }
}
}
}
foreach Nom $ListeDesPABs {
Espionne $Nom
if {[info exists DejaVu($Nom)]} { continue }
set FichierPhylo "$RepertoireDuGenome/phylos/$Nom"
set FichierDisphy "$RepertoireDuGenome/disphy/$Nom"
Wup "On peut ne pas avoir cree les fichiers phylos, alors on le fait ici."
if { ! [file exists $FichierPhylo]} {
Espionne "Creation de phylo pour $Nom"
Wup "J'en cree qu'un, pas plusieurs ..."
CreeLesFichiersPhylos $Nom
}
if { ! [file exists $FichierPhylo]} {
Warne "$FichierPhylo couldn't be created"
continue
}
if {$NotreOsEstLaReference} {
set Reference $Nom
} else {
set Reference [TrouveLaReferenceVoulue $ReferenceVoulue $FichierPhylo]
}
if {$KeepDisphy && $NotreOsEstLaReference && [file exists $FichierDisphy]} {
set ListeTriee [LesLignesDuFichier $FichierDisphy]
} else {
set ListeTriee [ListeTrieeDesDistancesPhylos $Nom $Reference]
if {$SauveDansDisphy} {
if { ! [file exists $FichierDisphy] || ! $KeepDisphy } {
Espionne "Creation de disphy pour $Nom"
SauveLesLignes $ListeTriee dans "$RepertoireDuGenome/disphy/$Nom"
}
}
}
# lappend Sortie "$Nom [join $ListeTriee " "]"
AppendAuFichier $FichierDistancesPhylo "$Nom [join $ListeTriee " "]"
}
return $FichierDistancesPhylo
}
proc ListeTrieeDesDistancesPhylos {Nom Reference {Arbre ""}} {
global RepertoireDuGenome
global ListeDistanceDeChaqueFeuille
global NotreOS
set FichierPhylo "$RepertoireDuGenome/phylos/$Nom"
Wup "On peut ne pas avoir cree les fichiers phylos"
if { ! [file exists $FichierPhylo]} {
Wup "J'en cree qu'un, pas plusieurs ..."
CreeLesFichiersPhylos $Nom
}
if { ! [file exists $FichierPhylo]} {
Warne "$FichierPhylo couldn't be created"
return {}
}
set ListeDistanceDeChaqueFeuille {}
catch {unset SortieSeqDist}
catch {set SortieSeqDist [split [exec seqdist $FichierPhylo $Reference] "\n"]}
if { ! [info exists SortieSeqDist]} {
Warne "seqdist did'nt success with $FichierPhylo $Reference"
return {}
}
if {[llength $SortieSeqDist] == 0} { return {} }
foreach Ligne $SortieSeqDist {
if {[scan $Ligne "%s %s %s %f" Cible to Feuille Distance]!=4 } { continue }
lappend ListeSeqDistDeChaqueFeuille "$Feuille $Distance"
}
set ListeTrieeSD [lsort -command "CompareLesFloats" $ListeSeqDistDeChaqueFeuille]
Wup "On demande tous les Orgas en une seule fois"
set LesAccess {}
foreach FeuilleDistance $ListeTrieeSD {
scan $FeuilleDistance "%s %f" Feuille DistanceFloat
lappend LesAccess $Feuille
}
foreach AccessOrga [LesOrgasDesAccess $LesAccess Court] {
Espionne $AccessOrga
set Orga "iinc"
scan $AccessOrga "%s %s" Access Orga
set OrgaDuAccess($Access) $Orga
}
set ListeOrgaDistance {}
foreach FeuilleDistance $ListeTrieeSD {
Wup "Je stocke les distances en INTEGER de 0 a 100"
scan $FeuilleDistance "%s %f" Feuille DistanceFloat
set Access $Feuille
if {[llength $ListeTrieeSD] == 1} { set DistanceFloat [expr $DistanceFloat/2] }
set Distance [expr round(100*$DistanceFloat)]
if {[info exists OrgaDuAccess($Access)]} {
set Orga [set OrgaDuAccess($Access)]
} else {
set Orga [Glossaire "Inconnu inconnu" Court]
}
foreach O [SplitOrgas $Orga] {
lappend ListeOrgaDistance "$O $Distance $Access"
}
}
return $ListeOrgaDistance
}
proc CopieLesPH {} {
global RepertoireDuGenome
foreach Fichier [LesLignesDuFichier "$RepertoireDuGenome/listedesph.fof"] {
if { ! [regexp -nocase {[a-z0-9]} $Fichier]} { continue }
set AA [string range [file tail $Fichier] 0 2]
set Destin "$RepertoireDuGenome/phylos/[AutreCode $AA]"
if {[file exists $Destin]} { continue }
Espionne " copy -force $Fichier $Destin"
File copy -force $Fichier $Destin
}
}
proc AutreCode X {
global RepertoireDuGenome
global AutreCode
if { ! [info exists AutreCode]} {
foreach Ligne [LesLignesDuFichier "$RepertoireDuGenome/fiches/lookup"] {
scan $Ligne "%s %s" Nom AA
set AutreCode($Nom) $AA
set AutreCode($AA) $Nom
}
}
return [set AutreCode($X)]
}
proc Scrunch Sequence {
regsub -all {\.|\~} $Sequence "" Sequence
return $Sequence
}
proc OrgApprochant {Genre Espece} {
if {[regexp -nocase "^sacc" $Genre]} { set Genre "Schizosacc" }
set LesOrgApprochants {}
set LaCommandeOrgApprochantExiste 1
if {$LaCommandeOrgApprochantExiste} {
catch {set LesOrgApprochants [split [eval exec orgapprochant $Genre $Espece] "\n"]}
} else {
foreach Texte [Glossaire "ListOf" "Complet"] {
scan $Texte "%s %s" Genre Espece
if {[regexp -nocase "^$Gen" $Genre] && [regexp -nocase "^$Esp" $Espece]} {
set Organisme "$Genre $Espece"
lappend LesOrgApprochants $Organisme
}
}
}
if {[llength $LesOrgApprochants] == 1} { return [lindex $LesOrgApprochants 0]}
if {0 && [llength $LesOrgApprochants] > 1} {
foreach Organisme $LesOrgApprochants {
scan $Organisme "%s %s" G E
if {[regexp -nocase "^$Genre" $G] && [regexp -nocase "^$Espece" $E]} {
return $Organisme
}
}
}
while {[llength $LesOrgApprochants] != 1} {
# set Organisme "$Genre $Espece"
set Organisme [ChoixParmi [concat [list "$Genre $Espece" "... other" "Unknown unknown"] $LesOrgApprochants]]
if {$Organisme=="... other"} { set Organisme [Entre "$Genre $Espece"] }
if {$Organisme==""} { set Organisme "Unknown unknown" }
set LesOrgApprochants [list $Organisme]
}
return [lindex $LesOrgApprochants 0]
}
proc CreeUnFichierEMBL {AA3 Organisme AA1 Sequence {Extension ""}} {
set Sortie {}
scan $Organisme "%s %s" Genre Espece
set Gen_esp ""
append Gen_esp [string toupper [string range $Genre 0 0]]
append Gen_esp [string tolower [string range $Genre 1 2]]
append Gen_esp "_[string tolower [string range $Espece 0 2]]"
set Access "${AA1}_${Gen_esp}$Extension"
lappend Sortie "ID $Access; cree par rR d'apres un MSF egare."
lappend Sortie "AC $Access"
lappend Sortie "DE ${AA3}rs"
lappend Sortie "OS $Organisme"
lappend Sortie "OC [OCduOS $Organisme]"
lappend Sortie [QueSequenceFormatEMBL $Sequence "AvecSQ"]
return $Sortie
}
proc UT X {
global UT
if {[string length $X]==1} {
set X [string toupper $X]
} else {
set X [string tolower $X]
}
if {$X=="ace"} { return "" }
if { ! [info exists UT]} {
set UT(ala) A
set UT(glu) E
set UT(gln) Q
set UT(trp) W
set UT(phe) F
set UT(pha) F
set UT(phb) f
set UT(tyr) Y
set UT(cys) C
set UT(met) M
set UT(ser) S
set UT(lys) K
set UT(ly1) k
set UT(leu) L
set UT(val) V
set UT(ile) I
set UT(asp) D
set UT(thr) T
set UT(his) H
set UT(arg) R
set UT(pro) P
set UT(gly) G
set UT(gla) J
set UT(glb) j
set UT(asn) N
foreach {Y ValUT} [array get UT] {
set UT($ValUT) $Y
}
set UT(csy) C
set UT(asi) [set UT(asn)]
set UT(aya) [set UT(ala)]
set UT(cea) [set UT(cys)]
set UT(cme) [set UT(cys)]
set UT(cro) [set UT(ser)]
set UT(csd) [set UT(cys)]
set UT(css) [set UT(cys)]
set UT(csw) [set UT(cys)]
set UT(cxm) [set UT(met)]
set UT(glh) [set UT(glu)]
set UT(hic) [set UT(his)]
set UT(hph) [set UT(phe)]
set UT(kcx) [set UT(lys)]
set UT(mho) [set UT(met)]
set UT(mse) [set UT(met)]
set UT(mso) [set UT(met)]
set UT(nep) [set UT(his)]
set UT(oas) [set UT(ser)]
set UT(omt) [set UT(met)]
set UT(pca) [set UT(gln)]
set UT(sac) [set UT(ser)]
set UT(tpo) [set UT(thr)]
}
if {[info exists UT($X)]} { return [set UT($X)] }
if {[string length $X]==1} { return XXX }
if {[string length $X]==3} { return x }
return $X
}
proc AADuNomDuFichier {NomDuFichier {AvecAlias "AvecAlias"}} {
global AAAlias
if { ! [info exists AAAlias] } {
set AAAlias(ly1) lys
set AAAlias(ly2) lys
set AAAlias(pha) phe
set AAAlias(phb) phe
set AAAlias(gla) gly
set AAAlias(glb) gly
}
set AA3 [string range $NomDuFichier 0 2]
if { $AvecAlias != "AvecAlias" && [info exists AAAlias($AA3)]} {
return [set AAAlias($AA3)]
} else {
return $AA3
}
}
proc ClasseCanonique OC {
set OrigOC $OC
regsub -all "ARCHAEBACTERIA;" $OC "ARCHAEA;" OC
regsub -all "BACILLACEAE;" $OC "BACILLUS/STAPHYLOCOCCUS GROUP;" OC
regsub "; PTERYGOTA; LEPIDOPTERA;" $OC "; PTERYGOTA; NEOPTERA; ENDOPTERYGOTA; LEPIDOPTERA;" OC
regsub "; PTERYGOTA; DIPTERA;" $OC "; PTERYGOTA; NEOPTERA; ENDOPTERYGOTA; DIPTERA;" OC
regsub "; PTERYGOTA; COLEOPTERA;" $OC "; PTERYGOTA; NEOPTERA; ENDOPTERYGOTA; COLEOPTERA;" OC
return "$OC"
}
proc QueryDuFichierBlast Fichier {
set LesLignes [LesLignesDuFichier $Fichier]
foreach Ligne [lrange $LesLignes 0 20] {
if {[regexp "Query=" $Ligne]} {
scan $Ligne "%s %s" Bidon Query
return $Query
}
}
return ""
}
proc AfficheLesCouleursEtSignifications K {
global TypeCouleur
set LesNomSignif [LesSignificationsAssocieesAuxORFs $K]
set OldSignif "trululuyoupiii"
set LaSortie {}
foreach Ligne $LesNomSignif {
scan $Ligne "%s" Nom
set Signif [StringSuivant " " dans $Ligne]
if {$Signif!=$OldSignif} { set N 0 }
lappend LaSortie "$Nom [incr N] $Signif"
set OldSignif $Signif
}
return [AfficheVariable [join $LaSortie "\n"] "AvecShow"]
}
proc CreeLeFichierAssocieAuxCouleurs {K {Fichier ""}} {
global TypeCouleur
set LesNomSignif [LesSignificationsAssocieesAuxORFs $K]
if {$Fichier==""} {
set Fichier [FichierPourSaveAs "[RepertoireDeTravail]/[set TypeCouleur($K)].lst"]
if {$Fichier==""} { return "" }
}
return [SauveLesLignes $LesNomSignif dans "$Fichier"]
}
proc LesSignificationsAssocieesAuxORFs K {
global TypeCouleur
set TypeDeCouleur [set TypeCouleur($K)]
foreach Nom [ListeDesPABs] {
set Couleur [CouleurParTypeEtNom $TypeDeCouleur $Nom $K]
lappend LesNomSignif "$Nom [GetSignification $Couleur $K]"
}
set LesNomSignif [lsort -command CompareSansPremierChamp $LesNomSignif]
return $LesNomSignif
}
proc TestDecortiqueBlast {{Nom ""}} {
global RepertoireDuGenome
global ListeDesPABs
if { $Nom == "" } {
ChargeListeDeBoites
set Liste $ListeDesPABs
} else {
set Liste [list $Nom]
}
foreach Nom $Liste {
set FichierBlastP "$RepertoireDuGenome/blastp/$Nom"
DecortiqueBlast $FichierBlastP \
"SansSeuilExpect" "SansLimiteDeNombre" Query lBanqueId lAccess lDE lProfil lPN lPartieSegAli
foreach BanqueId $lBanqueId Access $lAccess DE $lDE Profil $lProfil PN $lPN SegAli $lPartieSegAli {
puts "$BanqueId $Access $DE $Profil $PN \n$SegAli"
}
continue
set FichierBlast "$RepertoireDuGenome/blastngenembl/$Nom"
if { ! [file exists $FichierBlast]} { continue }
DecortiqueBlast $FichierBlast \
0.001 5 Query lBanqueId lAccess lDE lProfil lPN
foreach BanqueId $lBanqueId Access $lAccess DE $lDE Profil $lProfil PN $lPN {
Espionne "$Nom $BanqueId $Access $DE $Profil $PN"
set LeEMBL [LaSequenceDesBanques $BanqueId $Access a "OnVeutNucEMBL"]
if {$LeEMBL=={}} {
} else {
EspionneL $LeEMBL
break
}
}
Espionne ""
continue
set FichierBallast "$RepertoireDuGenome/ballast/$Nom"
if { ! [file exists $FichierBallast]} { continue }
set FichierBlastP "$RepertoireDuGenome/blastp/$Nom"
DecortiqueBlast $FichierBallast \
"SansSeuilExpect" "SansLimiteDeNombre" Query lBanqueId lAccess lDE lProfil lPN
foreach BanqueId $lBanqueId Access $lAccess DE $lDE Profil $lProfil PN $lPN {
puts "$BanqueId $Access $DE $Profil $PN"
}
DecortiqueBlast $FichierBlastP \
"SansSeuilExpect" "SansLimiteDeNombre" Query lBanqueId lAccess lDE lProfil lPN
foreach BanqueId $lBanqueId Access $lAccess DE $lDE Profil $lProfil PN $lPN {
puts "$BanqueId $Access $DE $Profil $PN"
}
}
exit
}
proc LaLigneAPnOsOc {Nom Candidat} {
global RepertoireDuGenome
global LesLignesAPnOsOc NomDuAPnOsOcCourant
scan $Candidat "%s %s %f" BanqueId Access PN
if { ! [info exists NomDuAPnOsOcCourant] || $NomDuAPnOsOcCourant != $Nom } {
set FichierAPnOsOc "$RepertoireDuGenome/apnosoc/$Nom"
if { ! [file exists $FichierAPnOsOc]} {
set LesLignesAPnOsOc {}
}
set LesLignesAPnOsOc [LesLignesDuFichier $FichierAPnOsOc]
set NomDuAPnOsOcCourant $Nom
}
set Ieme [lsearch -regexp $LesLignesAPnOsOc "$BanqueId $Access"]
if { $Ieme < 0 } { return "" }
return [lindex $LesLignesAPnOsOc $Ieme]
}
proc OnGardeCommeNouvelOrganisme {OS {Controle "SansDemander"}} {
global RepertoireDuGenome
global NouvelOrganisme
set FichierNouveauxOrganismes "$RepertoireDuGenome/fiches/nouveauxorganismes"
if { ! [info exists NouvelOrganisme]} {
set NouvelOrganisme(RIPPUS_RAYMONDII) 1
if {[file exists "$FichierNouveauxOrganismes"]} {
foreach Ligne [LesLignesDuFichier "$FichierNouveauxOrganismes"] {
set NouvelOrganisme($Ligne) "lu"
}
}
}
set OS [string toupper $OS]
if {[info exists NouvelOrganisme($OS)]} { return $OS }
if { $Controle == "EnDemandant"} {
if {! [OuiOuNon "Can I keep \n$OS \n as organism name ?" 0]} {
return ""
}
while { ! [regexp {^[A-Z]+ [A-Z]+} $OS] } {
if {[OuiOuNon "$OS \n contains wrong characters, I forget it ?"]} { return "" }
set OS [Entre $OS]
}
}
set GloOS [Glossaire $OS Complet]
if {$GloOS != "" } { Espionne "$GloOS existe, je suis content." ; return $GloOS }
AppendAuFichier "$FichierNouveauxOrganismes" $OS
set NouvelOrganisme($OS) "cree"
return $OS
}
proc OrganismeCanonique {OS {Controle "Stricte"}} {
global DejaTraite
set OriginalOS $OS
set NePasDemanderPourRaccourcir [expr [string equal $Controle "NonStricte"]]
set NePasDemanderPourRallonger [expr [string equal $Controle "NonStricte"]]
regsub -all {\,} $OS " " OS
regsub -all {\.} $OS " " OS
regsub -all {\;} $OS " " OS
while {[regexp " " $OS]} { regsub -all " " $OS " " OS }
set OS [string trim $OS]
set iParenthese [string first "(" $OS]
if {$iParenthese!=-1} {
set OS [string trim [string range $OS 0 [expr $iParenthese - 1]]]
}
set LesMots [split [string trim $OS] " "]
Wup " ............................................ cas connus et nouveaux acceptes."
set PremierMot [lindex $LesMots 0]
if {[llength $LesMots] == 1 && [regexp -nocase "VIRUS" $PremierMot]} {
set LesMots [list VIRUS $PremierMot]
}
if {[llength $LesMots] == 1 && $Controle=="Sommaire"} {
if {[regexp -nocase "^Xenopus$" $PremierMot]} { return "Xenopus laevis" }
return "$PremierMot $PremierMot"
}
if {[llength $LesMots] == 2} {
if {$Controle=="Sommaire"} { return [join $LesMots " "] }
set Orga [Glossaire $OS Complet]
if {$Orga != ""} { return $Orga }
if {$Controle == "Stricte"} {
return [OnGardeCommeNouvelOrganisme $OS "EnDemandant"]
}
Wup "Attention on accepte tel quel."
if {$Controle == "NonStricte"} {
OnGardeCommeNouvelOrganisme $OS "SansDemander"
return $OS
}
}
Wup "Homo sapiens sapiens"
if {[llength $LesMots] == 3 && [lindex $LesMots 1] == [lindex $LesMots 2]} {
set OS [join [lrange $LesMots 0 1] " "]
if {$Controle=="Sommaire"} { return $OS }
set Orga [Glossaire $OS Complet]
if {$Orga != ""} { return $Orga }
if {$Controle == "Stricte"} {
return [OnGardeCommeNouvelOrganisme $OS "EnDemandant"]
}
Wup "Attention on accepte tel quel."
if {$Controle == "NonStricte"} {
OnGardeCommeNouvelOrganisme $OS "SansDemander"
return $OS
}
}
if {[llength $LesMots] > 2} {
if {$Controle == "NonStricte" && [info exists DejaTraite($OriginalOS)]} {
return [set DejaTraite($OriginalOS)]
}
if {[regexp -nocase "VIRUS" $OS]} {
set LesMots [linsert $LesMots 0 "VIRUS"]
}
if {[regexp -nocase "ENDOSYMBIONT" $OS]} {
set LesMots [linsert $LesMots 0 "ENDOSYMBIONT"]
}
if {[regexp -nocase "ENDOBACTERIUM" $OS]} {
set LesMots [linsert $LesMots 0 "ENDOSYMBIONT"]
}
set UnEtDeux [join [lrange $LesMots 0 1] " "]
if {$Controle=="Sommaire"} { return $UnEtDeux }
if {$NePasDemanderPourRaccourcir || [OuiOuNon "Can I take $UnEtDeux\nfrom $OriginalOS ?"]} {
set Orga $UnEtDeux
set DejaTraite($OriginalOS) $Orga
} else {
set Orga [string trim [Entre "$OriginalOS"]]
}
} else {
if {$NePasDemanderPourRallonger} {
set Orga "Unknown $OS"
} else {
set Orga [string trim [Entre "$OriginalOS"]]
}
}
if {$Controle == "Stricte"} {
return [OnGardeCommeNouvelOrganisme $Orga "EnDemandant"]
}
if {$Controle == "NonStricte"} {
OnGardeCommeNouvelOrganisme $Orga "SansDemander"
return $Orga
}
return [string trim $OriginalOS]
}
proc FindPatternDansADNetRAC Pattern {
global ADN TDN RAC
if { ! [info exists ADN]} { ChargeADNetTDNetRAC }
set PatternPourRegexp $Pattern
regsub -all {[oO]} $PatternPourRegexp "\[GC\]" PatternPourRegexp
regsub -all {[iI]} $PatternPourRegexp "\[AT\]" PatternPourRegexp
regsub -all {[nN]} $PatternPourRegexp "\[ATGCX\]" PatternPourRegexp
set Courant 0
while {[regexp -nocase -indices $PatternPourRegexp [string range $ADN $Courant end] Indices]} {
foreach {Debut Fin} $Indices {
incr Debut $Courant
incr Fin $Courant
puts "F [string range $ADN [expr $Debut-6] [expr $Debut -1]] \
[string range $ADN [expr $Debut] [expr $Fin]] \
[string range $ADN [expr $Fin+1] [expr $Fin+6]] $Debut $Fin"
}
set Courant [incr Debut 1]
}
set lRAC [string length $RAC]
set Courant 0
while {[regexp -nocase -indices $PatternPourRegexp [string range $RAC $Courant end] Indices]} {
foreach {Debut Fin} $Indices {
incr Debut $Courant
incr Fin $Courant
puts "R [string range $RAC [expr $Debut-6] [expr $Debut - 1]] \
[string range $RAC [expr $Debut] [expr $Fin]] \
[string range $RAC [expr $Fin+1] [expr $Fin+6]] \
[expr $lRAC - $Debut] [expr $lRAC - $Fin]"
}
set Courant [incr Debut 1]
}
}
proc MiseAJourDesFichiersApns {{NomVoulu ""}} {
global RepertoireDuGenome
Wup "Updates the lines where no organism was found"
Wup "Updates if < SeuilExpect and 250 first one only"
set SeuilExpect 0.001
scan [TailleSortiePourDBClustal] "%d %d" MinObliges MaxVoulus
set MaxListe {Maxi 250 [expr 3*$MaxVoulus]}
if { ! [file exists "$RepertoireDuGenome/apns_maj"]} { File mkdir "$RepertoireDuGenome/apns_maj" }
if {$NomVoulu==""} {
set Liste [ListeDesPABs]
} else {
set Liste [list $NomVoulu]
}
foreach Nom $Liste {
Espionne "Je mets a jour les cops de $Nom"
set FichierAPNs "$RepertoireDuGenome/apns/$Nom"
if { ! [file exists $FichierAPNs]} { continue }
set FichierNouveau "$RepertoireDuGenome/apns_maj/$Nom"
if {[file exists $FichierNouveau]} { continue }
set nLu 0
set LesAccess {}
foreach Ligne [LesLignesDuFichier $FichierAPNs] {
scan $Ligne "%s %s %s" BanqueId Access Expect
incr nLu
lappend LesAccess $Access
set GEs ""
regsub " *$BanqueId +$Access +$Expect *" $Ligne "" GEs
if { ! [regexp -nocase {[a-z]} $GEs]} { continue }
set OrgaTrouve([string toupper $Access]) $GEs
}
foreach AGEs [LesOrgasDesAccess $LesAccess] {
scan $AGEs "%s" A
regsub "$A " $AGEs "" GEs
regsub {(^|\:)Inconnu inconnu($|\:)} $GEs "" GEs
if {$GEs==""} { continue }
set OrgaTrouve([string toupper $A]) $GEs
}
set MesOrgas {}
set nLu 0
foreach Ligne [LesLignesDuFichier $FichierAPNs] {
scan $Ligne "%s %s %f" BanqueId Access Expect
if {[EstUnAccessPDB $BanqueId]} { continue }
set ACCESS [string toupper $Access]
set Orgas ""
if {[info exists OrgaTrouve($ACCESS)]} {
set Orgas [set OrgaTrouve($ACCESS)]
} else {
if {$Expect <= $SeuilExpect && $nLu <= $MaxListe && ! [EstUnAccessPDB $Access]} {
set Orgas [OrgaDuAccess $Access Complet $BanqueId]
if {$Orgas!=""} {
Espionne " J'ai trouve pour $Nom $Orgas"
}
}
}
AppendAuFichier $FichierNouveau "$BanqueId $Access $Expect $Orgas"
}
}
return
}
proc CreeLesFichiersApns {{RepertoireDesBlasts "blastp"} {RepertoireDesAPns ""}} {
global RepertoireDuGenome
if { ! [file exists "$RepertoireDuGenome/$RepertoireDesBlasts"] || $RepertoireDesAPns=="" } {
switch -regexp $RepertoireDesBlasts {
"blastp" {
set DirDesBlasts "$RepertoireDuGenome/blastp"
set DirDesApns "$RepertoireDuGenome/apns"
}
"blastn" {
set DirDesBlasts "$RepertoireDuGenome/blastn"
set DirDesApns "$RepertoireDuGenome/apns"
}
"trouxs" {
set DirDesBlasts "$RepertoireDuGenome/trousblastx"
set DirDesApns "$RepertoireDuGenome/trouxsapns"
}
"trouns" {
set DirDesBlasts "$RepertoireDuGenome/troustblastxgenembl"
set DirDesApns "$RepertoireDuGenome/trounsapns"
}
"trous" {
set DirDesBlasts "$RepertoireDuGenome/trousblastp"
set DirDesApns "$RepertoireDuGenome/trousapns"
}
default {
set DirDesBlasts "$RepertoireDesBlasts"
if {[file isdirectory "$RepertoireDesAPns"]} {
set DirDesApns "$RepertoireDesAPns"
} elseif {[file isdirectory "$RepertoireDuGenome/$RepertoireDesAPns"]} {
set DirDesApns "$RepertoireDuGenome/$RepertoireDesAPns"
} elseif {[OuiOuNon "Should I create $RepertoireDuGenome/$RepertoireDesAPns"]} {
set DirDesApns "$RepertoireDuGenome/$RepertoireDesAPns"
} else {
FaireLire "Please create the correct directory $RepertoireDesAPns"
return "RepertoireDesAPns inexistant"
}
}
}
} else {
if {[file exists "$RepertoireDesBlasts"] && [file exists "$RepertoireDesAPns"]} {
set DirDesBlasts "$RepertoireDesBlasts"
set DirDesApns "$RepertoireDesAPns"
} else {
FaireLire "Please create the correct directory $RepertoireDesAPns"
return "RepertoireDesAPns inexistant"
}
}
File mkdir "$DirDesApns"
set Conserve 0
if {[llength [glob -nocomplain "$DirDesApns/*"]] > 0} {
set Conserve [OuiOuNon "Should I keep the existing files in $DirDesApns ?"]
}
foreach FichierBlast [lsort [glob -nocomplain "$DirDesBlasts/*"]] {
set Nom [file tail $FichierBlast]
if { ! [YaPABouTROUouTRNAouARNenDebutDe $Nom] || [regexp ".encours" $Nom]} { continue }
set FichierACreer "$DirDesApns/$Nom"
if {$Conserve && [file exists $FichierACreer]} { continue }
set lBanqueId {}
DecortiqueBlast $FichierBlast \
"SansSeuilExpect" "SansLimiteDeNombre" Query lBanqueId lAccess lDE lProfil lPN
set ListeAPN {}
if {[file tail $RepertoireDesBlasts]=="blastp"} {
foreach AGEs [LesOrgasDesAccess $lAccess] {
scan $AGEs "%s" A
regsub "$A " $AGEs "" GEs
regsub {(^|\:)Inconnu inconnu($|\:)} $GEs "" GEs
if {$GEs==""} { continue }
set OrgaTrouve([string toupper $A]) $GEs
}
}
foreach BanqueId $lBanqueId Access $lAccess PN $lPN {
if {[file tail $RepertoireDesBlasts]=="blastn"} {
set Ligne "$BanqueId $BanqueId $PN"
} else {
set Ligne "$BanqueId $Access $PN"
if {[info exists OrgaTrouve([string toupper $Access])]} {
append Ligne " [set OrgaTrouve([string toupper $Access])]"
}
}
lappend ListeAPN $Ligne
}
Espionne [SauveLesLignes $ListeAPN dans $FichierACreer]
}
}
proc CreeLeFichierNombreDeCopainsDansBlast {{Source ""} {SeuilExpect ""} {Extension ""}} {
global RepertoireDuGenome
while {$Source==""} {
FaireLire "I'll create Blast Hit count, please choose the source information"
set LesSources [list DifferentOX DaedalusHits apns blastx blastp tblastngenomes tblastnhuman "MyOwnBlastDirectory"]
set LesTextes [list \
"Count only different TaxId" \
"Count all DaedalusHits" \
"Use ./apns/* files (obsolete)" \
"Count simply hits from BlastX" \
"Count simply hits from BlastP" \
"Count simply hits from TBlastN genomes" \
"Count simply hits from TBlastN human" \
"Count simply hits from MyOwnBlastDirectory" ]
set Source [ChoixParmiJoli $LesSources {} $LesTextes]
if {$Source=="MyOwnBlastDirectory"} {
FaireLire "Please give the name of Your own blast directory\nthe letters 'blast' must appear in your name"
set Source [Entre "blast"]
}
if {$Source=="" && [OuiOuNon "Do I cancel "]} { return "" }
}
if {$SeuilExpect==""} { set SeuilExpect 0.001 }
set FichierNombreDeCopainsDansBlast "$RepertoireDuGenome/fiches/nombredecopainsdansblast$Extension"
if {$Extension=="" && [OuiOuNon "Do You want to add an extension to \n\
$FichierNombreDeCopainsDansBlast"]} {
set Extension [Entre ".$Source"]
append FichierNombreDeCopainsDansBlast $Extension
}
set ListeNomNCops {}
if {$Source=="DaedalusHits" || $Source=="DifferentOX"} {
foreach Nom [ListeDesPABs] {
set FicDaedalus "[RepertoireDuGenome]/daedalushits/$Nom"
if { ! [file exists $FicDaedalus]} { continue }
set nCops 0
if {[info exists DejaVu]} { unset DejaVu }
foreach Ligne [LesLignesDuFichier $FicDaedalus] {
set AncienneLigne $Ligne
set PN [ValeurDeLaBalise PN Ligne]
if {$PN==""} { continue ; FaireLire $AncienneLigne }
if { [expr $PN > $SeuilExpect] } { break }
set OX [ValeurDeLaBalise OX Ligne]
if {[info exists DejaVu($OX)]} { continue }
incr nCops
if {$Source=="DifferentOX"} { set DejaVu($OX) 1 }
}
lappend ListeNomNCops "$Nom $nCops"
}
} elseif {$Source=="apns"} {
set ListeDesAPNs [concat \
[glob -nocomplain "$RepertoireDuGenome/apns/*"] \
[glob -nocomplain "$RepertoireDuGenome/trousapns/*"] \
[glob -nocomplain "$RepertoireDuGenome/trouxsapns/*"] \
[glob -nocomplain "$RepertoireDuGenome/trounsapns/*"] \
]
foreach FichierAPN [lsort $ListeDesAPNs] {
set Nom [file tail $FichierAPN]
set nCops 0
foreach Ligne [LesLignesDuFichier $FichierAPN] {
scan $Ligne "%s %s %f" BanqueId Access PN
if { [expr $PN > $SeuilExpect] } { break }
incr nCops
}
lappend ListeNomNCops "$Nom $nCops"
}
} elseif {[regexp "blast" $Source]} {
foreach Nom [ListeDesPABs] {
set FichierBlast "[RepertoireDuGenome]/$Source/$Nom"
if { ! [file exists $FichierBlast]} { continue }
set nCops [DecortiqueBlast $FichierBlast $SeuilExpect "" "BlastHitCount"]
Espionne "$Nom $nCops"
lappend ListeNomNCops "$Nom $nCops"
}
} else {
FaireLire "Please give the source for CreeLeFichierNombreDeCopainsDansBlast"
return ""
}
set Fichier [SauveLesLignes $ListeNomNCops dans $FichierNombreDeCopainsDansBlast]
ChargeNombreDeCopainsDansBlast
return $Fichier
}
proc CorrigeUneExpressionDansLesInfos {Old New {Confirmation "SansConfirmation"}} {
global RepertoireDuGenome
set SansConfirmation [string compare $Confirmation "AvecConfirmation"]
foreach Fichier [glob "$RepertoireDuGenome/infos/*"] {
set Nom [file tail $Fichier]
set LesNouvellesLignes {}
set YaModif 0
foreach Ligne [LesLignesDuFichier $Fichier] {
if {[regexp $Old $Ligne]} {
if {$SansConfirmation || [OuiOuNon "Je corrige $Nom\n$Ligne\n ?"]} {
set YaModif 1
regsub $Old $Ligne $New Ligne
}
}
lappend LesNouvellesLignes $Ligne
}
if {$YaModif} {
Espionne [SauveLesLignes $LesNouvellesLignes dans $Fichier]
}
}
}
proc LesOrganismesTresProches {} {
global RepertoireDuGenome
global LesOrganismesTresProches
global DemandeDejaFaite
global Org1 Org2
if {[info exists Org1] && [info exists Org2]} {
if { ! [info exists LesOrganismesTresProches]} {
set LesOrganismesTresProches [list $Org1 $Org2]
}
return $LesOrganismesTresProches
}
set Org1 " "
set Org2 " "
if {[OnTraiteUneCollection]} { return {}}
set RepertoireFiches "$RepertoireDuGenome/fiches"
if { ! [file exists $RepertoireFiches]} {
File mkdir $RepertoireFiches
}
if { ! [info exists LesOrganismesTresProches]} {
set Fichier "$RepertoireDuGenome/fiches/lesorganismestresproches"
if { [info exists DemandeDejaFaite] && ! [file exists $Fichier]} {
return {}
}
while { ! [file exists $Fichier]} {
if { ! [OuiOuNon "Do You want to give the two nearest organisms ?" 0]} {
set DemandeDejaFaite 1
if {[OuiOuNon "Do I ask later ?"]} { return {} }
Sauve "Aaaa\nBbbb" dans $Fichier
} else {
FaireLire "You have to select 2 organisms.\nThe first one ..."
scan [MontreOrganismes "AvecRetour"] "%s %s %s" Orga Genre Espece
set Orga [Glossaire "$Genre $Espece" Court]
lappend LesOrganismesTresProches $Orga
FaireLire "The second one ..."
scan [MontreOrganismes "AvecRetour"] "%s %s %s" Orga Genre Espece
set Orga [Glossaire "$Genre $Espece" Court]
lappend LesOrganismesTresProches $Orga
SauveLesLignes $LesOrganismesTresProches dans $Fichier
}
}
set LesOrganismesTresProches [LesLignesDuFichier $Fichier]
}
set Org1 [lindex $LesOrganismesTresProches 0]
set Org2 [lindex $LesOrganismesTresProches 1]
return $LesOrganismesTresProches
}
proc LesEntetesChevronneesDuBlast {Page {GetWhat ""} {Titre ""}} {
if { ! [regexp "\n" $Page]} {
set Fichier $Page
if {[EstUnPAB $Fichier]} {
if {[FileAbsent $Fichier]} { set Fichier [GscopeFile $Fichier "blastp"] }
if {[FileAbsent $Fichier]} { set Fichier [GscopeFile $Fichier "blastn"] }
}
if {[FileAbsent $Fichier]} { return "" }
set Page [ContenuDuFichier $Fichier]
}
if {$GetWhat==""} { set GetWhat "GetHeaders" }
set OnAttendChevron 1
set OnAttendFinEntete 0
foreach Ligne [split $Page "\n"] {
if {$OnAttendChevron && [regexp {^>} $Ligne]} {
set Entete $Ligne
set OnAttendChevron 0
set OnAttendFinEntete 1
continue
}
if {$OnAttendFinEntete} {
if {[regexp {^ {10}Length =} $Ligne]} {
set OnAttendFinEntete 0
set OnAttendChevron 1
regsub -all { +} $Entete " " Entete
} else {
append Entete " $Ligne"
}
continue
}
if {[regexp {^ Score = } $Ligne]} {
set Expect [PNApres "Expect = " dans $Ligne]
lappend LesScoreExpect $Ligne
}
if {[regexp {^ Identities = } $Ligne]} {
lappend LesIdentities $Ligne
lappend LesEntetes "[string trim $Entete] Expect=$Expect"
}
}
if {$GetWhat=="GetHeaders"} { return $LesEntetes }
if {$GetWhat=="GetScoreExpect"} { return $LesScoreExpect }
if {$GetWhat=="GetIdentities"} { return $LesIdentities }
if {$GetWhat=="GetAll"} { return [list $LesEntetes $LesScoreExpect $LesIdentities]}
if {$Titre==""} { set Titre "Headers" }
return [AfficheVariable [join $LesEntetes "\n"] "AvecFetch" $Titre]
}
proc AfficheAliEnPage {Page LigneAccess Fichier} {
return [AfficheVariable [PartieSegAli $Page $LigneAccess] " " $Fichier]
}
proc AfficheFetch {Selection {NomDuFichierOrigine ""}} {
global RepertoireDuGenome
global AccessDejaVus
Wup "On cherche la sequence et on l'affiche"
Gs "Frame"
if {[regexp " " $NomDuFichierOrigine]} {
foreach Mot [split $NomDuFichierOrigine " "] {
if {[regexp "/" $Mot]} { set NomDuFichierOrigine $Mot ; break }
}
}
if {[regexp " " $NomDuFichierOrigine]} { scan $NomDuFichierOrigine "%s" NomDuFichierOrigine }
set FormatVoulu ""
if {$NomDuFichierOrigine=="OnVeutNature"} {
set FormatVoulu "OnVeutNature"
set NomDuFichierOrigine ""
}
if {[regexp "^OnVeut" $NomDuFichierOrigine]} {
set FormatVoulu $NomDuFichierOrigine
set NomDuFichierOrigine ""
}
set Nom ""
if {$NomDuFichierOrigine != "" } {
set Nom [file tail $NomDuFichierOrigine]
Wup "NomDuFichierOrigine peut finir par Nom (de PAB)"
if { ! [YaPABdans $Nom]} {
Wup "Recherche du pab si c'est un copain"
set Nom [file tail [file dirname $NomDuFichierOrigine]]
}
if { ! [YaPABdans $Nom]} { set Nom "" }
}
Wup "Si Nom n'est pas vide c'est qu'on a affaire a un PAB"
set LesFramesFetchees {}
set Liste [split $Selection "\n"]
foreach Ligne $Liste {
if { ! [regexp -nocase {[a-z0-9_]} $Ligne]} { continue }
set Ligne [OteSuperfluPourFetch $Ligne]
scan $Ligne "%s" aPDB
if {[EstUnAccessPDB $aPDB]} {
if {[info exists DejaVu($aPDB)]} { continue }
set DejaVu($aPDB) 1
if {[set LaFramePDB [AffichePDB $aPDB]]!=""} {
lappend LesFramesFetchees $LaFramePDB
continue
}
}
set BanqueId ""
set Access ""
Wup "On cherche d'abord Access dans la ligne"
if { [regexp "^Query=" $Ligne] } {
Wup "C'est une ligne Query"
set Access [QueryDeLaLigne $Ligne]
} elseif { [regexp "^Name:" $Ligne] } {
Wup "C'est une ligne d'un MSF"
set Access [lindex [split $Ligne " "] 1]
} elseif { [regexp {^(AC|ID) } $Ligne] } {
Wup "C'est une ligne d'un EMBL"
scan $Ligne "%s %s" AC Access
} elseif {[regexp -nocase {^[a-z0-9_]+=[a-z0-9_]+ } $Ligne]} {
Wup "Ligne descriptif"
regsub "=" $Ligne " " Access_BanqueId
scan $Access_BanqueId "%s %s" Access BanqueId
} elseif {[regexp {^[a-zA-Z0-9_]+:[a-zA-Z0-9_]+[ !]* [a-zA-Z0-9_]+} $Ligne]} {
Wup "Ligne blast"
regsub "!" $Ligne " " BanqueId_Access
scan $BanqueId_Access "%s %s" BanqueId Access
} elseif { [regexp {^[a-zA-Z0-9_]+: +[a-zA-Z0-9_]+} $Ligne]} {
Wup "Ligne du type 'Clef: access'"
scan $Ligne "%s %s" Bidon Access
} else {
scan $Ligne "%s" Access
}
if {$BanqueId==""} { set BanqueId $Access }
if {$Nom!="" && [OnTraiteUneCollection]} {
set FichierCopain "$RepertoireDuGenome/coembl/$Nom/$Access"
if {[file exists $FichierCopain]} {
if {[info exists DejaVu($FichierCopain)]} { continue }
set DejaVu($FichierCopain) 1
lappend LesFramesFetchees [AfficheVariable [ContenuDuFichier $FichierCopain] "AvecBlasteAvecFormate" "$FichierCopain"]
continue
}
}
if {[info exists DejaVu($BanqueId,$Access)]} { continue }
set AccessOk ""
set LaSeqDesBan [LaSequenceDesBanques $BanqueId $Access AccessOk $FormatVoulu]
set Sequence [join $LaSeqDesBan "\n"]
if {$Sequence!=""} {
set DejaVu($BanqueId,$Access) 1
lappend LesFramesFetchees [AfficheVariable $Sequence "AvecBlasteAvecFormate" $AccessOk]
continue
}
Wup "Ici on n'a toujours rien trouve ... "
set FichierMSF "$RepertoireDuGenome/msf/$Nom"
if {[info exists DejaVu($FichierMSF)]} { continue }
if {[YaPABdans $Nom] && [file exists $FichierMSF]} {
set Sequence [UneSequenceDuMSF $FichierMSF $Access]
set TFA [SequenceFormatTFA $Sequence $Access "protbrut"]
if {$TFA!=""} {
set DejaVu($FichierMSF) 1
lappend LesFramesFetchees [AfficheVariable $TFA "AvecBlasteAvecFormate"]
continue
}
}
}
if {[llength $LesFramesFetchees]>0} {
return [lindex $LesFramesFetchees 0]
}
}
proc AfficheLesAliEnPage {Page Selection Fichier} {
foreach s [split $Selection "\n"] {
AfficheAliEnPage $Page $s $Fichier
}
}
proc AfficheLogDesMSF Selection {
foreach MSF [split $Selection "\n"] {
AfficheLogDuMSF $MSF
}
}
proc AfficheLogDuMSF MSF {
global LogDuMSF
if {[info exists LogDuMSF($MSF)]} {
set Log [set LogDuMSF($MSF)]
} else {
regsub {.out} $MSF {.log} logmsf
regsub {.msf$} $logmsf {} Log
}
if {[info exists Log]} {
AfficheFichier $Log "AvecRien"
}
}
proc MemoSelection {w {Action "Memorize"}} {
global MemoSelection
if {$Action=="Memorize"} {
if {[info exists MemoSelection($w)]} { unset MemoSelection($w) }
set MemoSelection($w) [$w.frame.list curselection]
return [set MemoSelection($w)]
}
if {$Action=="Recall" && [info exists MemoSelection($w)]} {
foreach i [set MemoSelection($w)] {
$w.frame.list selection set $i
}
return [set MemoSelection($w)]
}
return ""
}
proc PackBo {Bouton {Action ""}} {
global PackBo
if {$Action=="NoWeb"} { set NoWeb 1 } else { set NoWeb 0 }
if {$NoWeb && [PourWscope]} { destroy $Bouton ; return "" }
set W [winfo parent [winfo parent $Bouton]]
if { ! [info exists PackBo($W)]} {
set PackBo($W) -1
}
set B [incr PackBo($W)]
set BpR 5
set DestFrame "[winfo parent $Bouton].rangee[expr $B/$BpR]"
if {[expr $B%$BpR == 0]} {
pack $DestFrame -side "top" -fill x -pady 1m
}
incr B
if {[expr $B%$BpR == 0]} {
set ProchaineDestFrame "[winfo parent $Bouton].rangee[expr $B/$BpR]"
if { ! [winfo exists $ProchaineDestFrame]} {frame $ProchaineDestFrame}
}
pack $Bouton -in $DestFrame -side left -expand 1 -padx 1m
return $Bouton
}
proc LesOnListDeSeeAbyPossibles {} {
set LesOnListPossibles {}
foreach Ligne [split [info body SeeAby] "\n"] {
if { ! [regexp {\# OnList} $Ligne]} { continue }
scan $Ligne "%s" Possible
regsub -all {\"} $Possible "" Possible
Espionne $Possible
lappend LesOnListPossibles $Possible
}
return $LesOnListPossibles
}
proc LesRepertoiresInteressantsPour {Nom {HtmlAussi ""} {Vite ""}} {
}
proc LesRepertoiresPossiblesPour {Nom {HtmlAussi ""} {Vite ""}} {
global RepertoireDuGenome
if {$Nom=="All"} {
set Vite "TesteRepertoire"
if {$HtmlAussi==""} { set HtmlAussi "HtmlAussi" }
}
if {$Vite==""} { set Vite "Vite" }
if {$Vite=="TestePresence" || $Vite=="TesteRepertoire"} { set Vite 0 } else { set Vite 1 }
if {$HtmlAussi=="HtmlAussi"} {set HtmlAussi 1 } else {set HtmlAussi 0 }
if {$Vite} {
set LesRepNom [glob -nocomplain "[RepertoireDuGenome]/*/$Nom"]
if {$HtmlAussi} {
set LesRepNomHtml [glob -nocomplain "[RepertoireDuGenome]/*/$Nom.html"]
LConcat LesRepNom $LesRepNomHtml
}
set LesPossibles {}
foreach RepNom $LesRepNom {
lappend LesPossibles [file tail [file dirname $RepNom]]
}
return $LesPossibles
}
set LesPossibles {}
set LesRepertoires [glob -nocomplain -type d $RepertoireDuGenome/*]
set LesLiens [glob -nocomplain -type l $RepertoireDuGenome/*]
foreach Lien $LesLiens {
set But [file readlink $Lien]
if {[file isdirectory $But]} { lappend LesRepertoires $But }
}
if {$Nom=="All"} {
foreach Rep $LesRepertoires {
set LesRepNom [glob -nocomplain "$Rep/[PreFixe]*"]
if {$LesRepNom=={}} {continue}
lappend LesPossibles [file tail $Rep]
}
return $LesPossibles
}
foreach Rep $LesRepertoires {
if {$Vite} { lappend LesPossibles [file tail $Rep] ; continue }
if {[file exists "$Rep/$Nom"]} {
lappend LesPossibles [file tail $Rep]
continue
}
if {$HtmlAussi && [file exists "$Rep/$Nom.html"]} {
lappend LesPossibles [file tail $Rep]
continue
}
if {[OnTraiteDesCDNAs]} { continue }
foreach SousRep [lsort [glob -nocomplain -type d $Rep/*]] {
if {[file exists $Rep/$Nom]} {
lappend LesPossibles "[file tail $Rep]/[file tail $SousRep]"
continue
}
}
}
return $LesPossibles
}
proc LesRepertoiresPourSeeAbyShow {{Action ""}} {
global LesRepertoiresPourSeeAbyShow
if {$Action==""} { set Action "Get" }
set FichierShowDirs "[RepertoireDuGenome]/fiches/showdirs"
if {$Action=="Get"} {
if {[info exists LesRepertoiresPourSeeAbyShow]} { return $LesRepertoiresPourSeeAbyShow }
if {[file exists $FichierShowDirs]} {
set LesRepertoiresPourSeeAbyShow [LesLignesDuFichier $FichierShowDirs]
} else {
set LesRepertoiresPourSeeAbyShow [list \
bilan \
notes \
msf \
infos \
blastp \
prottfa \
nuctfa \
ver \
]
}
return $LesRepertoiresPourSeeAbyShow
}
set LesAnciens [LesRepertoiresPourSeeAbyShow]
if {$Action=="Ask"} {
set LesFichiersPossibles [glob -nocomplain "$FichierShowDirs*"]
if {$LesFichiersPossibles!={}} {
while {[OuiOuNon "Do you want to load a file ?"]} {
set FichierPossible [ButineArborescence "All" "[RepertoireDuGenome]/fiches/"]
if {$FichierPossible==""} { continue }
set LesAnciens [LesLignesDuFichier $FichierPossible]
break
}
}
set LesReps [MorceauxChoisisAndMore $LesAnciens]
if {$LesReps=={}} { set LesReps $LesAnciens }
foreach Rep $LesReps {
lappend LesNouveaux [file tail $Rep]
}
set LesRepertoiresPourSeeAbyShow $LesNouveaux
while {[OuiOuNon "Do You want to save this list in a file ?"]} {
set NewFichierShowDirs [FichierPourSaveAs $FichierShowDirs]
if {$NewFichierShowDirs==""} { continue }
SauveLesLignes $LesRepertoiresPourSeeAbyShow dans $NewFichierShowDirs
break
}
return $LesRepertoiresPourSeeAbyShow
}
}
proc ShowNote Nom {
return [SeeAby notes $Nom]
}
proc SeeAby {Quoi Fichier} {
global RepertoireDuGenome
global PABCourant
global VariableToSetForWscope
Gs "Frame"
if {$Fichier==""} { return "" }
scan $Fichier "%s" Fichier
set Nom [file tail $Fichier]
set PABCourant $Nom
if {$Quoi=="OnList"} {
set LesPossibles [LesOnListDeSeeAbyPossibles]
lappend LesPossibles Loc
set Quoi [ChoixParmi $LesPossibles]
if {$Quoi==""} { return }
}
if {$Quoi=="Loc"} { return [AfficheChaqueSegmentDuBlastN $Nom] }
global MemoAny
if {$Quoi=="MemoAny"} {
if {[info exists MemoAny]} {
return [SeeAby $MemoAny $Fichier]
} else {
return [SeeAby "ChooseAny" $Fichier]
}
}
if {$Quoi=="ChooseAny" || $Quoi=="AllAny"} {
set LesAnyDisponibles {}
foreach Rep [glob -nocomplain "$RepertoireDuGenome/*"] {
set Queue [file tail $Rep]
if {$Quoi=="AllAny"} {
if {[file exists "$Rep/$Nom"]} {
SeeAby "Any" $Fichier
}
continue
}
if {$Quoi=="ChooseAny"} {
lappend LesAnyDisponibles $Queue
}
}
if {$Quoi=="AllAny"} { return $LesAnyDisponibles }
if {$Quoi=="ChooseAny"} {
set VariableToSetForWscope "MemoAny"
set Choix [ChoixParmi $LesAnyDisponibles]
if {$Choix==""} { return "" }
set MemoAny "$Choix"
return [SeeAby "MemoAny" $Fichier]
}
}
global MemoMsf
if {$Quoi=="MemoMsf"} {
if {[info exists MemoMsf]} {
return [SeeAby "$MemoMsf" $Fichier]
} else {
if {[OnTraiteUnGenome]} { set MemoMsf "MSF_msf" }
if {[OnTraiteDesCDNAs]} { set MemoMsf "MSF_msf" }
if {[info exists MemoMsf]} {
return [SeeAby "MemoMsf" $Fichier]
} else {
return [SeeAby "ChooseMsf" $Fichier]
}
}
}
if {$Quoi=="ChooseMsf" || $Quoi=="AllMsf"} {
set LesMsfDisponibles {}
foreach Rep [glob -nocomplain "$RepertoireDuGenome/*msf*"] {
set Queue [file tail $Rep]
if {$Quoi=="AllMsf"} {
if {[file exists "$Rep/$Nom"]} {
SeeAby "Msf" $Fichier
}
continue
}
if {$Quoi=="ChooseMsf"} {
lappend LesMsfDisponibles $Queue
}
}
if {$Quoi=="AllMsf"} { return $LesMsfDisponibles }
if {$Quoi=="ChooseMsf"} {
set VariableToSetForWscope "MemoMsf"
set Choix [ChoixParmi $LesMsfDisponibles]
if {$Choix==""} { return "" }
set MemoMsf "MSF_$Choix"
return [SeeAby "MemoMsf" $Fichier]
}
}
global MemoBlast
if {$Quoi=="MemoBlast"} {
if {[info exists MemoBlast]} {
if {$MemoBlast=="Blast"} { return [SeeAby "Banque$MemoBlast" $Fichier] }
return [SeeAby "Banque$MemoBlast" $Fichier]
} else {
if {[OnTraiteUnGenome]} { set MemoBlast "blastp" }
if {[OnTraiteDesCDNAs]} { set MemoBlast "blastn" }
if {[info exists MemoBlast]} {
return [SeeAby "MemoBlast" $Fichier]
} else {
return [SeeAby "ChooseBlast" $Fichier]
}
}
}
if {$Quoi=="ChooseBlast" || $Quoi=="AllBlast"} {
set LesBlastDisponibles {}
foreach Rep [glob -nocomplain "$RepertoireDuGenome/*blast*"] {
set Banque [file tail $Rep]
# regsub -nocase {trou[sx]+} $Banque "" Banque
if {$Quoi=="AllBlast"} {
if {[file exists "$Rep/$Nom"]} {
SeeAby "Banque$Banque" $Fichier
}
continue
}
if {$Quoi=="ChooseBlast"} {
lappend LesBlastDisponibles $Banque
}
}
if {$Quoi=="AllBlast"} { return $LesBlastDisponibles }
if {$Quoi=="ChooseBlast"} {
set VariableToSetForWscope "MemoBlast"
set Ban [ChoixParmi $LesBlastDisponibles]
if {$Ban==""} { return "" }
set MemoBlast $Ban
return [SeeAby "MemoBlast" $Fichier]
}
}
if {[regexp "LesTBlastN" $Quoi]} {
foreach Rep [glob -nocomplain "$RepertoireDuGenome/tblastn*"] {
set Banque [file tail $Rep]
if {[file exists "$Rep/$Nom"]} {
SeeAby "Banque$Banque" $Fichier
}
}
}
if {[regexp "^all" $Quoi]} {
set Quoi [string tolower $Quoi]
regsub "all" $Quoi "" Quoi
set Quoi "[string range $Quoi 0 end-1]last[string range $Quoi end end]"
foreach Rep [glob -nocomplain "$RepertoireDuGenome/$Quoi*"] {
if {[file type $Rep]=="link"} {
set Cible [file readlink $Rep]
if {[regexp "^$Quoi" [file tail $Cible]]} { continue }
}
if {[file exists "$Rep/$Nom"]} {
set Rep [file tail $Rep]
SeeAby $Rep $Fichier
}
}
return
}
if {[regexp "^Banque" $Quoi]} {
regsub "Banque" $Quoi "" Banque
set Quoi "Banque"
}
if {[regexp "^MSF_" $Quoi]} {
regsub "MSF_" $Quoi "" MsfDir
set Quoi "MSF_"
}
set FichierExcuse "Sorry_I_cannot_find_the_file_associate_with_${Quoi}_${Fichier}"
if {[OnTraiteUneCollection] && $Quoi=="Pep"} { set Quoi "PhEnNJPlot" }
if {$Quoi=="Other"} {
set LesPossibles [LesRepertoiresPossiblesPour $Nom]
set Quoi [ChoixParmi [lsort $LesPossibles]]
if {$Quoi==""} { return "" }
}
if {$Quoi=="Nicolas"} {
set LesPossibles {Correlator Secator NuCA}
set LesPossibles {Correlator}
set Quoi [ChoixParmi $LesPossibles]
if {$Quoi==""} { return "" }
}
if {$Quoi=="Blast" && [OnTraiteDesCDNAs]} {
set Quoi "BlastN"
}
if {$Quoi=="Seq" && [OnTraiteDesCDNAs]} {
set Quoi "Nuc"
}
switch $Quoi {
"Show" { # OnList
foreach Rep [LesRepertoiresPourSeeAbyShow] {
set FichierShow "$RepertoireDuGenome/$Rep/$Nom"
if { ! [file exists $FichierShow]} { continue }
if {$Rep=="msf" && [regexp "NoSequenceToAlign" $FichierShow]} { continue }
break
}
if {[file exists $FichierShow] && [file size $FichierShow]>0} {
if {$Rep=="msf"} { return [SeeAby "MSF" $FichierShow] }
return [AfficheFichier $FichierShow "AutoManiere"]
}
return [AfficheVariable "I found nothing to display for $Nom" "" $Nom]
}
"Correlator" { # OnList
switch -regexp $Nom \
"[PreFixe]" { set FichierBlastP "$RepertoireDuGenome/blastp/$Nom" } \
default { set FichierBlastP $FichierExcuse }
if {$FichierBlastP == $FichierExcuse || ! [file exists $FichierBlastP]} {
FaireLire "No file to show"
return ""
} else {
return [Correlator $FichierBlastP [NomDe fenetre]]
}
}
"Secator" { # OnList
switch -regexp $Nom \
"[PreFixe]" { set FichierBlastP "$RepertoireDuGenome/blastp/$Nom" } \
default { set FichierBlastP $FichierExcuse }
if {$FichierBlastP == $FichierExcuse || ! [file exists $FichierBlastP]} {
FaireLire "No file to show"
return ""
} else {
return [Correlator $FichierBlastP [NomDe fenetre]]
}
}
"Ordali" { # OnList
switch -regexp $Nom \
"[PreFixe]" { return [Ordali $Nom $Fichier] } \
default { return ""}
}
"PhEnNJPlot" {
switch -regexp $Nom \
"[PreFixe]" { set FichierPh "$RepertoireDuGenome/phylos/$Nom" } \
default { set FichierPh $FichierExcuse }
if {$FichierPh == $FichierExcuse} {
FaireLire "No file to plot"
return ""
} else {
return [NJPlotPH $FichierPh]
}
}
"Nuc" { # OnList
switch -regexp $Nom \
"[PreFixe]" { set FichierNuc "$RepertoireDuGenome/nuctfa/$Nom" } \
"ARN" { set FichierNuc "$RepertoireDuGenome/nuctfa/$Nom" } \
"TRNA" { set FichierNuc "$RepertoireDuGenome/nuctfa/$Nom" } \
{TROU[0-9]*N} { set FichierNuc "$RepertoireDuGenome/nuctfa/$Nom" } \
{TROU[0-9]*[A-F]} { set FichierNuc "$RepertoireDuGenome/prottfa/$Nom" } \
default { set FichierNuc $FichierExcuse }
if {$FichierNuc==$FichierExcuse} {
set FichierNuc "$RepertoireDuGenome/nuctfa/$Nom"
if {[FileAbsent $FichierNuc]} { set FichierNuc $FichierExcuse }
}
return [AfficheFichier $FichierNuc "AvecBlasteAvecFormate"]
}
"Seq" { # OnList
switch -regexp $Nom \
"[PreFixe]" { set FichierPep "$RepertoireDuGenome/prottfa/$Nom" } \
"ARN" { set FichierPep "$RepertoireDuGenome/nuctfa/$Nom" } \
"TRNA" { set FichierPep "$RepertoireDuGenome/nuctfa/$Nom" } \
{TROU[0-9]*N} { set FichierPep "$RepertoireDuGenome/nuctfa/$Nom" } \
{TROU[0-9]*[A-F]} { set FichierPep "$RepertoireDuGenome/prottfa/$Nom" } \
default { set FichierPep $FichierExcuse }
if {$FichierPep==$FichierExcuse} {
set FichierPep "$RepertoireDuGenome/prottfa/$Nom"
if {[FileAbsent $FichierPep]} { set FichierPep $FichierExcuse }
}
return [AfficheFichier $FichierPep "AvecBlasteAvecFormate"]
}
"Embl" { # OnList
switch -regexp $Nom \
"[PreFixe]" { set FichierPep "$RepertoireDuGenome/protembl/$Nom" } \
"ARN" { set FichierPep "$RepertoireDuGenome/nucembl/$Nom" } \
"TRNA" { set FichierPep "$RepertoireDuGenome/nucembl/$Nom" } \
{TROU[0-9]*N} { set FichierPep "$RepertoireDuGenome/nucembl/$Nom" } \
{TROU[0-9]*[A-F]} { set FichierPep "$RepertoireDuGenome/protembl/$Nom" } \
default { set FichierPep $FichierExcuse }
if {$FichierPep==$FichierExcuse} {
set FichierPep "$RepertoireDuGenome/protembl/$Nom"
if {[FileAbsent $FichierPep]} { set FichierPep $FichierExcuse }
}
return [AfficheFichier $FichierPep "AvecBlasteAvecFormate"]
}
"BlastN" { # OnList
switch -regexp $Nom \
"[PreFixe]" { set FichierBlast "$RepertoireDuGenome/blastn/$Nom" } \
"ARN" { set FichierBlast "$RepertoireDuGenome/arnblastn/$Nom" } \
"TRNA" { set FichierBlast "$RepertoireDuGenome/trnablastn/$Nom" } \
{TROU[0-9]*N} { set FichierBlast "$RepertoireDuGenome/troustblastxgenembl/$Nom" } \
"TROU" { set FichierBlast "$RepertoireDuGenome/trousblastn/$Nom" } \
default { set FichierBlast $FichierExcuse }
if {$FichierBlast==$FichierExcuse} {
set FichierBlast "$RepertoireDuGenome/blastn/$Nom"
if {[FileAbsent $FichierBlast]} { set FichierBlast $FichierExcuse }
}
return [AfficheFichier $FichierBlast \
"AvecGrapheAvecSegAlignementAvecAligneurs"]
}
"Blast" { # OnList
switch -regexp $Nom \
"[PreFixe]" { set FichierBlast "$RepertoireDuGenome/blastp/$Nom" } \
"ARN" { set FichierBlast "$RepertoireDuGenome/arnblastp/$Nom" } \
"TRNA" { set FichierBlast "$RepertoireDuGenome/trnablastp/$Nom" } \
{TROU[0-9]*N} { set FichierBlast "$RepertoireDuGenome/trousblastx/$Nom" } \
"TROU" { set FichierBlast "$RepertoireDuGenome/trousblastp/$Nom" } \
default { set FichierBlast $FichierExcuse }
if {$FichierBlast==$FichierExcuse} {
set FichierBlast "$RepertoireDuGenome/blastp/$Nom"
if {[FileAbsent $FichierBlast]} { set FichierBlast $FichierExcuse }
}
return [AfficheFichier $FichierBlast \
"AvecGrapheAvecSegAlignementAvecAligneurs"]
}
"Ballast" { # OnList
switch -regexp $Nom \
"[PreFixe]" { set FichierBlastP "$RepertoireDuGenome/blastp/$Nom" } \
"TROU" { set FichierBlastP "$RepertoireDuGenome/trousblastp/$Nom" } \
default { return "" }
return [AfficheBallastDuBlastP $FichierBlastP $Nom]
}
"Banque" { # OnList
switch -regexp $Nom \
"[PreFixe]" { set FichierBlast "$RepertoireDuGenome/$Banque/$Nom" } \
"ARN" { set FichierBlast "$RepertoireDuGenome/arn$Banque/$Nom" } \
"TRNA" { set FichierBlast "$RepertoireDuGenome/trna$Banque/$Nom" } \
{TROU[0-9]+N} { set FichierBlast "$RepertoireDuGenome/$Banque/$Nom" } \
{aRemettreTROU[0-9]+N} { regsub "p" $Banque "x" Banque ; set FichierBlast "$RepertoireDuGenome/$Banque/$Nom" } \
"TROU" { set FichierBlast "$RepertoireDuGenome/trou$Banque/$Nom" } \
default { set FichierBlast $FichierExcuse }
if {[regexp -nocase "tblastn" $Banque]} {
set Maniere "AvecSegAlignement"
} else {
set Maniere "AvecGrapheAvecSegAlignementAvecAligneurs"
}
return [AfficheFichier $FichierBlast $Maniere]
}
"MSF_" { # OnList
switch -regexp $Nom \
"[PreFixe]" { set FichierMSF "$RepertoireDuGenome/$MsfDir/$Nom" } \
"ARN" { set FichierMSF "" } \
"TRNA" { set FichierMSF "" } \
"TROU" { set FichierMSF "$RepertoireDuGenome/$MsfDir/$Nom" } \
default { set FichierMSF $FichierExcuse }
if {$FichierMSF==$FichierExcuse} {
set FichierMSF "$RepertoireDuGenome/$MsfDir/$Nom"
if {[FileAbsent $FichierMSF]} { set FichierMSF $FichierExcuse }
}
set FenetreMSF [AfficheFichier $FichierMSF "AvecEtudeMSFGrandeLargeur"]
return $FenetreMSF
}
"MSF" { # OnList
set MSFouDBC "msf"
switch -regexp $Nom \
"[PreFixe]" { set FichierMSF "$RepertoireDuGenome/$MSFouDBC/$Nom" } \
"ARN" { set FichierMSF "" } \
"TRNA" { set FichierMSF "" } \
"TROU" { set FichierMSF "$RepertoireDuGenome/trousmsf/$Nom" } \
default { set FichierMSF $FichierExcuse }
if {$FichierMSF==$FichierExcuse} {
set FichierMSF "$RepertoireDuGenome/$MSFouDBC/$Nom"
if {[FileAbsent $FichierMSF]} { set FichierMSF $FichierExcuse }
}
set FenetreMSF [AfficheFichier $FichierMSF "AvecEtudeMSFGrandeLargeur"]
return $FenetreMSF
}
"MSF2" { # OnList
set FichierMSF "$RepertoireDuGenome/msf2/$Nom"
if { ! [file exists $FichierMSF]} {
set FichierMSFMSF "$RepertoireDuGenome/msf2/$Nom.msf"
if { ! [file exists $FichierMSFMSF]} { return "" }
set FichierMSF $FichierMSFMSF
}
if {[file isdirectory $FichierMSF]} {
set RepMSF "$RepertoireDuGenome/msf2/$Nom"
set FichierMSF [ChoixParmi [glob -nocomplain "$RepMSF/*"]]
}
if {$FichierMSF==""} { return "" }
set FenetreMSF [AfficheFichier $FichierMSF "AvecEtudeMSFGrandeLargeur"]
return $FenetreMSF
}
"MSF3" { # OnList
set FichierMSF "$RepertoireDuGenome/msf3/$Nom"
if { ! [file exists $FichierMSF]} {
set FichierMSFMSF "$RepertoireDuGenome/msf3/$Nom.msf"
if { ! [file exists $FichierMSFMSF]} { return "" }
set FichierMSF $FichierMSFMSF
}
if {[file isdirectory $FichierMSF]} {
set RepMSF "$RepertoireDuGenome/msf3/$Nom"
set FichierMSF [ChoixParmi [glob -nocomplain "$RepMSF/*"]]
}
if {$FichierMSF==""} { return "" }
set FenetreMSF [AfficheFichier $FichierMSF "AvecEtudeMSFGrandeLargeur"]
return $FenetreMSF
}
"SpineXml" { # Onlist
set FichierXml "$RepertoireDuGenome/XmlFromSpine/$Nom"
return [AfficheFichier $FichierXml \
"AvecXmlGrandeLargeur"]
}
"MacsimXml" { # Onlist
set FichierXml "$RepertoireDuGenome/macsimXml/$Nom"
return [AfficheFichier $FichierXml \
"AvecXmlGrandeLargeur"]
}
"Para" { # OnList
set FichierMSF "$RepertoireDuGenome/msfparalogues/$Nom"
return [AfficheFichier $FichierMSF \
"AvecEtudeMSFGrandeLargeur"]
}
"Disphy" { # OnList
set Fichier "$RepertoireDuGenome/disphy/$Nom"
if {$Fichier==""} { return "" }
return [AfficheFichier $Fichier ""]
}
default {
set Fichier "$RepertoireDuGenome/$Quoi/$Nom"
if {$Fichier==""} { return "" }
return [AfficheFichier $Fichier "AutoManiere"]
}
}
}
proc AligneLesHomologuesDuBlast {Aligneur FichierBlast} {
global RepertoireDuGenome
set SeuilExpect 1e-3
set MaxLongueurDuBlast 50
DecortiqueBlast $FichierBlast $SeuilExpect $MaxLongueurDuBlast Query lBanqueId lAccess lDE lProfil lPN
set Nom [file tail $Query]
if {[YaPABdans $Nom]} {
set lHomos "$RepertoireDuGenome/prottfa/$Nom"
} elseif {[regexp "TROU" $Nom]} {
set lHomos "$RepertoireDuGenome/trousprottfa/$Nom"
} else {
set lHomos $Query
}
if { [info exists lBanqueId] && [llength $lBanqueId] > 0 } {
foreach BanqueId $lBanqueId Access $lAccess {
if {[FetchTest $BanqueId]} {
lappend lHomos $BanqueId
continue
}
if {[FetchTest "protein:$Access"]} {
lappend lHomos "protein:$Access"
continue
}
Warne "$BanqueId $Access introuvable"
}
}
set Destination "$RepertoireDuGenome/${Aligneur}/$Nom"
if { [llength $lHomos] < 2 } {
Warne "$Aligneur inutile. Pas de sequences a aligner dans $FichierBlast"
return ""
return [Sauve "$Aligneur inutile. Pas de sequences a aligner dans $FichierBlast" dans $Destination]
}
set Selection [join $lHomos "\n"]
set MSF [AlignePar $Aligneur $Selection "Interactif" $Nom]
file rename $MSF $Destination
return $Destination
}
proc AligneLesHomologuesDuBlastContreSeq {Aligneur FichierBlast {Seq ""}} {
global RepertoireDuGenome
set SeuilExpect 1e-3
set MaxLongueurDuBlast 50
DecortiqueBlast $FichierBlast $SeuilExpect $MaxLongueurDuBlast Query lBanqueId lAccess lDE lProfil lPN
set Nom [file tail $Query]
if { $Seq == ""} { set Seq $Query }
set lHomos [linsert $lAccess 0 $Seq]
if { [llength $lHomos] < 2 } { return "" }
set Selection [join $lHomos "\n"]
set MSF [AlignePar $Aligneur $Selection "Batch" $Nom]
return $MSF
}
proc Aligne3PdeADN {Nom Devant DebutDevant FinDevant \
Derriere DebutDerriere FinDerriere Orient} {
global RepertoireDuGenome
global Commandes
global ADN TDN RAC
global NePlusFaireAligne3P
if { ! [info exists NePlusFaireAligne3P]} { set NePlusFaireAligne3P 1 }
if { $Orient == "F" } {
set ListeDes3Frames {a b c}
} else {
set ListeDes3Frames {f e d}
}
if { $NePlusFaireAligne3P || ! [OuiOuNon "Je lance 3 alignements ?"]} {
return "a faire."
}
if { ! [info exists ADN]} { ChargeADNetTDNetRAC }
set NomDesSequences ""
if {[YaPABdans $Nom]} {
set FichierBlast "$RepertoireDuGenome/blastp/$Nom"
}
if {[regexp "TROU" $Nom]} {
set FichierBlast "$RepertoireDuGenome/trousblastp/$Nom"
}
if { $Devant == "Laisser" } {
set SequenceDevant [BoutADN $DebutDevant $FinDevant $Orient]
}
set LongueurPepDevant [expr ($FinDevant-$DebutDevant+1)/3]
if { $Derriere == "Laisser" } {
set SequenceDerriere [BoutADN $DebutDerriere $FinDerriere $Orient]
}
set LongueurPepDerriere [expr ($FinDerriere-$DebutDerriere+1)/3]
set Sens [expr $Orient=="F" ? -1 : 1]
foreach Frame $ListeDes3Frames {
set CasseDevant "toupper"
if { $Devant == "Changer" } {
incr DebutDevant $Sens
incr FinDevant $Sens
set SequenceDevant [BoutADN $DebutDevant $FinDevant $Orient]
set SequenceDevant [string tolower $SequenceDevant]
set CasseDevant "tolower"
set NomDeLaSequence "${Nom}_${LongueurPepDevant}_${Frame}"
}
set CasseDerriere "toupper"
if { $Derriere == "Changer" } {
incr DebutDerriere $Sens
incr FinDerriere $Sens
set SequenceDerriere [BoutADN $DebutDerriere $FinDerriere $Orient]
set SequenceDerriere [string tolower $SequenceDerriere]
set CasseDerriere "tolower"
set NomDeLaSequence "${Nom}_${Frame}_${LongueurPepDerriere}"
}
append NomDesSequences "$NomDeLaSequence "
set SequenceADN "$SequenceDevant$SequenceDerriere"
set SeqGCG [NucToGCG $SequenceADN $NomDeLaSequence]
set iPP [string first "\.\." $SeqGCG]
set EncoreDevant $LongueurPepDevant
set EncoreDerriere $LongueurPepDerriere
catch {unset VraiDebutDevant VraiDebutDerriere}
for {set i $iPP} {$i < [string length $SeqGCG]} {incr i} {
if {[regexp {[a-zA-Z\*]} [string range $SeqGCG $i $i]]} {
if { $EncoreDevant } {
if { ! [info exists VraiDebutDevant]} {
set VraiDebutDevant $i
}
set VraiFinDevant $i
incr EncoreDevant -1
} else {
if { $EncoreDerriere } {
if { ! [info exists VraiDebutDerriere]} {
set VraiDebutDerriere $i
}
set VraiFinDerriere $i
incr EncoreDerriere -1
}
}
}
}
set LowerSeqGCG "\
[string range $SeqGCG 0 [expr $VraiDebutDevant-1]]\
[string $CasseDevant [string range $SeqGCG $VraiDebutDevant $VraiFinDevant]]\
[string $CasseDerriere [string range $SeqGCG $VraiDebutDerriere end]]"
set iL [expr [string first "Length" $LowerSeqGCG]-1]
set BonneSeqGCG "$NomDeLaSequence[string range $LowerSeqGCG $iL end]"
set FichierPEP [Sauve $BonneSeqGCG dans $NomDeLaSequence]
foreach Aligneur [Aligneurs] {
if { [Aligneurs $Aligneur] } {
set MSF [AligneLesHomologuesDuBlastContreSeq \
$Aligneur $FichierBlast $FichierPEP]
lappend ListeDesMSF $MSF
}
}
}
set Fenetre [AfficheVariable [join $ListeDesMSF "\n"] \
"AvecShowAvecEtudeMSF" "Wait all be Highlighted ...\nThen reselect and press a function. "]
BoutonneLaFenetre $Fenetre "Log" "AfficheLogDesMSF \[selection get\]"
foreach Fichier $ListeDesMSF {
set LaFenetreDesMSF($Fichier) $Fenetre
}
return "Aligne3P est lance sur $NomDesSequences"
}
proc Blaste {Programme Sequence {NomOuNumOuSortie ""} {Banque ""}} {
global RepertoireDuGenome
global Commandes
Wup "Il existe aussi Blast plus interactif"
if {[FormatDeLaSequence $Sequence] == "tfas"} {
foreach Seq [split [string range $Sequence 1 end] ">"] {
Blaste $Programme ">$Seq"
}
return
}
if {[regexp "/" $NomOuNumOuSortie]} {
set NomNum "[RepertoireDeTravail]/tmp.[pid][NomDe ""]"
set Sortie $NomOuNumOuSortie
} else {
set Sortie ""
if { $NomOuNumOuSortie == "" } {
set NomNum "[RepertoireDeTravail]/tmp.[pid][NomDe ""]"
} elseif { [regexp {^[a-zA-Z]} $NomOuNumOuSortie ] } {
set NomNum ${NomOuNumOuSortie}[NomDe ""]
} elseif { [regexp {^[0-9]} $NomOuNumOuSortie ] } {
set NomNum "[RepertoireDeTravail]/tmp.$NomOuNumOuSortie"
} else {
set NomNum "[RepertoireDeTravail]/tmp.[pid][NomDe ""]"
set Sortie $NomOuNumOuSortie
}
}
set Tmp $NomNum
set In "$Tmp"
set Out "$In.blastp"
set Log "$Out.log"
Sauve [SequenceFormatTFA $Sequence] dans $In
if {$Sortie==""} { set AskOrNot "" } else { set AskOrNot "DontAsk" }
if { $Programme == "P" } {
if {$Banque==""} { set Banque "/catalog/blast/protall" }
set Prog "blastp"
} elseif { $Programme == "N" } {
if {$Banque==""} { set Banque "/catalog/blast/genembl" }
set Prog "blastn"
} elseif { $Programme == "X" } {
if {$Banque==""} { set Banque "/catalog/blast/protein" }
set Prog "blastx"
} elseif { $Programme == "tN" } {
if {$Banque==""} { set Banque "/catalog/blast/genomes" }
set Prog "tblastn"
} elseif { $Programme == "Choix" } {
set Prog ""
} else {
set Prog [ChoixParmi "blastp" "tblastn" "blastx" "blastn"]
}
set Commande [ChoisisTonBlast $In $Out $Prog $Banque $AskOrNot]
if {$Commande==""} { return "" }
if {$Sortie!=""} {
regsub {^.*batchcom.tcl *} $Commande "" Commande
set Etat [eval $Commande]
if { ! [file exists $Out]} { return "" }
if {$Sortie=="retourne"} { return [ContenuDuFichier $Out] }
File copy -force $Out $Sortie
return $Sortie
}
Espionne $Commande
if {[catch {set Canal [open "| $Commande"]} Message]} {
Warne $Message
}
fconfigure $Canal -blocking false -buffering line
fileevent $Canal readable "ClosCanalEtMontreBlaste $Canal $Out"
Warne "Blast $Programme lance en batch"
}
proc BlastXdeADN {Nom DebutBlastX FinBlastX} {
global Commandes
global ADN TDN RAC
global NePlusFaireBlastX
global RepertoireDuGenome
if { ! [info exists NePlusFaireBlastX]} { set NePlusFaireBlastX 1 }
if { ! [info exists ListeDeBoites] } { ChargeListeDeBoites }
if { $NePlusFaireBlastX || ! [OuiOuNon "Je lance BlastX ?"]} {
return "a faire."
}
if { ! [info exists ADN]} { ChargeADNetTDNetRAC }
if { [regexp {^[XFR]$} $Nom] } {
if { [regexp {^[XF]$} $Nom] } {
set Orient "F"
} else {
set Orient "R"
}
} else {
set Orient [Box $Nom orient]
if { $Orient == "" } {
FaireLire "$Nom n'est pas vraiment autorise\nen tant que debut de nom de sequence"
set Orient "F"
}
}
set NomDeLaSequence "${Nom}_${DebutBlastX}_${FinBlastX}"
set Sequence ">$NomDeLaSequence\n[BoutADN $DebutBlastX $FinBlastX $Orient]"
if { [regexp {^[XFR]$} $Nom] } {
Sauve $Sequence dans "$RepertoireDuGenome/tmpdir/$NomDeLaSequence"
}
set Num [NomDe ""]
set Tmp tmp.[pid]$Num
set In "$Tmp.BlastX.in"
set Out "$Tmp.BlastX"
set Log "$Out.log"
Sauve [SequenceFormatTFA $Sequence] dans $In
catch {set Canal [open "| $Commandes(blastx) $In $Out $Log"]} Message
Warne $Message
fconfigure $Canal -blocking false -buffering line
fileevent $Canal readable "ClosCanalEtMontreBlaste $Canal $Out $Log"
Warne "BlastX est lance en batch"
return "est lance sur $NomDeLaSequence"
}
proc EnterBox {K X Y} {
global CouleurEnEntree oldText
set Id [$K find withtag current]
set CouleurEnEntree [lindex [$K itemconfig $Id -fill] 4]
$K itemconfigure $Id -fill [Fard $K $X $Y]
# ShowBox $K $X $Y "Enter"
}
proc LeaveBox {K X Y} {
global CouleurEnEntree oldText
if { ! [info exists CouleurEnEntree]} { return }
set Id [$K find withtag current]
$K itemconfigure $Id -fill $CouleurEnEntree
# ShowBox $K $X $Y "Leave"
}
proc PositionCanvaOriginaleX {K xCanva} {
global ScrollRectangleOriginal IdScrollRectangle
scan "[$K coords [set IdScrollRectangle($K)]]" "%f %f %f %f" xMin yMin xMax yMax
scan "[set ScrollRectangleOriginal($K)]" "%f %f %f %f" xMinO yMinO xMaxO yMaxO
set xOrig [expr $xMinO+($xCanva-$xMin)*($xMaxO-$xMinO)/($xMax-$xMin)]
return [expr int($xOrig)]
}
proc PositionCanvaOriginaleY {K yCanva} {
global ScrollRectangleOriginal IdScrollRectangle
scan "[$K coords [set IdScrollRectangle($K)]]" "%f %f %f %f" xMin yMin xMax yMax
scan "[set ScrollRectangleOriginal($K)]" "%f %f %f %f" xMinO yMinO xMaxO yMaxO
set yOrig [expr $yMinO+($yCanva-$yMin)*($yMaxO-$yMinO)/($yMax-$yMin)]
return [expr int($yOrig)]
}
proc PositionCanvaActuelleX {K xOrig} {
global ScrollRectangleOriginal IdScrollRectangle
scan "[$K coords [set IdScrollRectangle($K)]]" "%f %f %f %f" xMin yMin xMax yMax
scan "[set ScrollRectangleOriginal($K)]" "%f %f %f %f" xMinO yMinO xMaxO yMaxO
set xCanva [expr $xMin+($xOrig-$xMinO)*($xMax-$xMin)/($xMaxO-$xMinO)]
return $xCanva
}
proc PositionCanvaActuelleY {K yOrig} {
global ScrollRectangleOriginal IdScrollRectangle
scan "[$K coords [set IdScrollRectangle($K)]]" "%f %f %f %f" xMin yMin xMax yMax
scan "[set ScrollRectangleOriginal($K)]" "%f %f %f %f" xMinO yMinO xMaxO yMaxO
set yCanva [expr $yMin+($yOrig-$yMinO)*($yMax-$yMin)/($yMaxO-$yMinO)]
return $yCanva
}
proc SearchOnBoard Texte {
Gs "DeplaceK"
scan $Texte "%s" Nom
if {[EstUnPAB $Nom]} { return [RepereBox "Nom: $Nom"] }
foreach Mot [LesMotsDeLaLigne $Texte] {
if {[EstUnPAB $Mot]} { return [RepereBox "Nom: $Mot"] }
}
return ""
}
proc RepereBox {Texte {K ""} {Next ""}} {
global RepertoireDuGenome
global ListeDesContenuInfo
global ListeDeBoites
global ListeRestante
global OldTexte
if {[PourWscope]} { regsub -all {\+} $Texte " " Texte }
Gs "DeplaceK"
if {[regexp -nocase "AllPlease" $K]} {
set Next $K
set K "Bidon"
}
if {$K==""} {
if {[PourWscope]} {
set K "PourWscope"
} else {
set K [KanvaCourant]
}
}
if { ! [info exists ListeDeBoites]} { ChargeListeDeBoites }
#Petit changement de ma part voir original ci dessous,ajout de [PreFixe] JEAN
if {[regexp "^Nom: [PreFixe]" $Texte] || \
[regexp {^Nom: (TROU|TRNA|ARN|GLIMMER)} $Texte] } {
set Nom [StringApres "Nom: " dans $Texte]
if {[Box $Nom nom] == $Nom} {
if {[PourWscope]} { return $Nom }
return [PositionneEtInforme $Nom $K $Next]
}
}
if {[regexp "^Nom: [ExpressionReguliereDesPABs]" $Texte] || \
[regexp {^Nom: (TROU|TRNA|ARN|GLIMMER)} $Texte] } {
set Nom [StringApres "Nom: " dans $Texte]
if {[Box $Nom nom] == $Nom} {
if {[PourWscope]} { return $Nom }
return [PositionneEtInforme $Nom $K $Next]
}
}
set Texte [string toupper $Texte]
if { ! [info exists ListeDesContenuInfo]} {
Wup "ExtraitInfo loads ListeDesContenuInfo"
ExtraitInfo "Bidon"
}
if {[regexp -nocase "AllPlease" $Next]} {
set FinString 30
if {[regexp -nocase "Info" $Next]} { set FinString "end" }
set Start 0
set LesTrouves {}
set LesInfosTrouves {}
set iTrouveOld 99999999999999
while {[set iTrouve [lsearch -start $Start -regexp $ListeDesContenuInfo $Texte]]>-1} {
if {$iTrouveOld==$iTrouve} { break }
set iTrouveOld $iTrouve
set NomTrouve [lindex $ListeDeBoites $iTrouve]
set InfoTrouve [string range [lindex $ListeDesContenuInfo $iTrouve] 0 $FinString]
if {[regexp -nocase "Info" $Next]} {
} else {
regsub -all "\n" $InfoTrouve "/" InfoTrouve
}
lappend LesTrouves "$NomTrouve"
lappend LesInfosTrouvees "$InfoTrouve"
set Start [expr $iTrouve + 1]
}
if {[regexp -nocase "Info" $Next]} { return $LesInfosTrouvees }
return $LesTrouves
}
if { ! [info exists ListeRestante]} {
set ListeRestante $ListeDesContenuInfo
}
if { $Next != "" && [info exists OldTexte] } { set Texte $OldTexte }
set OldTexte $Texte
if { [regexp "Next" $Next] } {
set iTrouve [lsearch -regexp $ListeRestante $Texte]
if { $iTrouve == -1 } {
set ListeRestante $ListeDesContenuInfo
set iTrouve [lsearch -regexp $ListeRestante $Texte]
}
} else {
set ListeRestante $ListeDesContenuInfo
set iTrouve [lsearch -regexp $ListeRestante $Texte]
}
if { $iTrouve == -1 } { return "" }
set DebutNom [string length "Nom: "]
scan [string range [lindex $ListeRestante $iTrouve] $DebutNom end] "%s" Nom
set ListeRestante [lrange $ListeRestante [expr $iTrouve+1] end]
if {[PourWscope]} { return $Nom }
return [PositionneEtInforme $Nom $K $Next]
}
proc PositionneEtInforme {Nom K {Next ""}} {
global ScrollRectangleOriginal IdScrollRectangle
global RepertoireDuGenome
global NePasEffacerLesRepereBox
global KanvaCourant
# puts stderr "PositionneEtInforme [Box $Nom nom]"
if {[Box $Nom nom] != $Nom} {
if { $K=="OrdrePourGif"} { return "rien" }
return $K
}
if {$K==""} { set K $KanvaCourant }
scan "[$K coords [set IdScrollRectangle($K)]]" "%f %f %f %f" xMin yMin xMax yMax
scan "[set ScrollRectangleOriginal($K)]" "%f %f %f %f" xMinO yMinO xMaxO yMaxO
# puts stderr "$xMin $yMin $xMax $yMax $xMinO $yMinO $xMaxO $yMaxO"
if {[regexp "rond" $K]} {
if { ! [info exists NePasEffacerLesRepereBox]} {
set LesId [$K find withtag "RepereBox"]
foreach Id $LesId {
$K delete $Id
}
}
Aiguille $Nom "black" $K "RepereBox" "milieu"
} else {
set Milieu [expr ([Box $Nom debut]+[Box $Nom fin])/2]
set Fraction [expr ($Milieu-$xMinO)/($xMaxO-$xMinO)]
# puts stderr "$Milieu $Fraction"
$K xview moveto $Fraction
$K xview scroll -5 units
}
if { $K=="OrdrePourGif"} { return "$Nom $Fraction" }
if { ! [regexp "SansInforme" $Next] && [file exists "$RepertoireDuGenome/infos/$Nom"]} {
Informe $Nom
}
return $K
}
proc ShowBoxAction {{Action "Enter"}} {
global RepertoireDuGenome
global ShowBoxEnter DefautShowBoxEnter
global ShowBoxClic DefautShowBoxClic
if {$Action!="Which" && ($Action=="EnterDefaults" || ! [info exists ShowBoxEnter])} {
set ShowBoxEnter(Definition) 1
set ShowBoxEnter(OrthoOperons) [file exists "$RepertoireDuGenome/fiches/oooperons"]
set ShowBoxEnter(OrthoTBlastN) [file exists "$RepertoireDuGenome/fiches/ootblastn"]
set ShowBoxEnter(OrthoBlastP) [file exists "$RepertoireDuGenome/fiches/ooblastp"]
set ShowBoxEnter(OrthoMissed) [file exists "$RepertoireDuGenome/fiches/oomsf"]
set ShowBoxEnter(OrthoDbClustal) [file exists "$RepertoireDuGenome/fiches/oomsf"]
if {[PreFixe]=="PEROX"} {
set ShowBoxEnter(OrthoDbClustal) 0
set ShowBoxEnter(OrthoTBlastN) 0
}
}
Wup "Clic ne sert pas encore"
if {$Action=="ClicDefaults" || ! [info exists ShowBoxClic]} {
set ShowBoxClic(PiqueBox) 0
}
if {$Action=="Which"} {
set Entete "When you enter in a box it appears :"
set Affiche [list $Entete]
if { ! [info exists ShowBoxEnter]} {
FaireLire "$Entete nothing. (You can choose an action)"
} else {
foreach {Act ValShowBoxEnter} [array get ShowBoxEnter] {
if { ! $ValShowBoxEnter} { continue }
lappend Affiche $Act
}
FaireLire [join $Affiche "\n"]
}
return
}
foreach Act [array names ShowBox$Action] {
set DefautShowBox[set Action]($Act) [set ShowBox[set Action]($Act)]
}
if {$Action=="Which" || $Action=="EnterDefaults" || $Action=="ClicDefaults"} { return }
CochonsLes ShowBox$Action DefautShowBox$Action
}
proc ShowBox {K X Y Action} {
global ShowBoxEnter
global YaQuelquUnDansShowBox
global OnEstSortiDUneBox
global SeparationShowBox
global LesEvenementsShowBox
Wup "Pour ne pas revenir pendant le traitement"
if {[info exists YaQuelquUnDansShowBox] && $YaQuelquUnDansShowBox} {
if { $Action == "Leave" } { set OnEstSortiDUneBox 1 }
return
}
regsub ".canvas" $K ".message" M
catch {destroy $M}
set Boite [BoiteDuCourant $K $X $Y]
if { $Boite == "" || [regexp "GLIMMER" $Boite] } { return }
set Nom [Box $Boite nom]
if { $Action == "Fixe"} {
return "JeNeSaisPasCeQueFaitFixe"
}
if { $Action == "Leave" } {
set OnEstSortiDUneBox 1
return ""
}
set OnEstSortiDUneBox 0
set YaQuelquUnDansShowBox 1
set LesLignes {}
if {[info exists ShowBoxEnter(Definition)] && [set ShowBoxEnter(Definition)]} {
if {[set DE [Definition $Nom "ApproxDansInfo"]]!=""} {
regsub { +ID\:.*} $DE "" DE
while {[string length $DE]>100} {
lappend LesLignes [string trim [string range $DE 0 99]]
set DE [string range $DE 100 end]
}
lappend LesLignes [string trim $DE]
}
}
set QuelsOrthos {}
if {[info exists ShowBoxEnter(OrthoOperons)] && [set ShowBoxEnter(OrthoOperons)]} {
lappend QuelsOrthos "O"
}
if {[info exists ShowBoxEnter(OrthoTBlastN)] && [set ShowBoxEnter(OrthoTBlastN)]} {
lappend QuelsOrthos "T"
}
if {[info exists ShowBoxEnter(OrthoBlastP)] && [set ShowBoxEnter(OrthoBlastP)]} {
lappend QuelsOrthos "P"
}
if {[info exists ShowBoxEnter(OrthoMissed)] && [set ShowBoxEnter(OrthoMissed)]} {
lappend QuelsOrthos "M"
}
if {[info exists ShowBoxEnter(OrthoDbClustal)] && [set ShowBoxEnter(OrthoDbClustal)]} {
lappend QuelsOrthos "A"
}
if {$QuelsOrthos!={}} {
lappend LesLignes [RecapitulatifDesOrthologues $Nom [join $QuelsOrthos ""]]
}
set Texte [join $LesLignes "\n"]
if {$OnEstSortiDUneBox} {
set YaQuelquUnDansShowBox 0
return ""
}
if {$Texte!=""} {
label $M -borderwidth 3 -font {Courier 10} -relief raise \
-background "lightyellow" -foreground "black" -justify left -anchor w \
-text $Texte
if {$Y < 200} { set dY 40 ; set Anc "nw" } else { set dY -40 ; set Anc "sw" }
place $M -x 10 -y [expr $Y+$dY] -anchor $Anc
update idletasks
}
set YaQuelquUnDansShowBox 0
return $M
}
proc ChargeADNetTDNetRAC {{Extension ""}} {
global RepertoireDuGenome
global ADN TDN RAC
set Fadn "$RepertoireDuGenome/beton/adn$Extension"
set Ftdn "$RepertoireDuGenome/beton/tdn$Extension"
set Frac "$RepertoireDuGenome/beton/rac$Extension"
if {[OnTraiteDesCDS] && ! [file exists $Fadn]} {
set Dernier [DernierPAB "EnPosition" "AvecBornes"]
scan $Dernier "%s %d %d %s" PAB Debut Fin Orient
incr Fin 1000
set ADN [string repeat "n" $Fin]
foreach PAB [ListeDesPABs] {
set Debut [Box $PAB debut]
set Fin [Box $PAB fin]
set Orient [Box $PAB orient]
set FiNucTFA "[RepertoireDuGenome]/nuctfa/$PAB"
if { ! [file exists $FiNucTFA]} { continue }
set SeqNuc [QueLaSequenceDuFichierTFA $FiNucTFA]
if {$Orient=="F"} {
set ADN [string replace $ADN $Debut $Fin $SeqNuc]
} else {
set RacSeqNuc [NucToReverseAndComplementNuc $SeqNuc]
set ADN [string replace $ADN $Debut $Fin $RacSeqNuc]
}
}
set TDN "n[NucToComplementNuc $ADN]"
set RAC "n[NucToReverseAndComplementNuc $ADN]"
return "ADNetTDNetRACFromNucTFA"
}
if { ! [file exists $Fadn]} {
return "ADNetTDNetRACNotAvailable"
}
set f [open $Fadn "r"]
gets $f ADN
close $f
set f [open $Ftdn "r"]
gets $f TDN
close $f
set f [open $Frac "r"]
gets $f RAC
close $f
return "ADNetTDNetRACFromBeton"
}
proc CouleurDeLaBoite {Boite TypeDeCouleur} {
global RepertoireDuGenome
global CouleurDeFrame
global CouleurDuFond
set Nom [Box $Boite nom]
return [CouleurParTypeEtNom $TypeDeCouleur $Nom]
}
proc FetcheBox {K X Y {Quoi "Show"}} {
global RepertoireDuGenome
if {[YaPABouTROUouTRNAouARNdans $X]} {
set Boite $X
} else {
set Boite [BoiteDuCourant $K $X $Y]
}
if { $Boite == "" } { return }
set Nom [Box $Boite nom]
if {[regexp "GLIMMER" $Nom]} {
return [AfficheNuc $Nom]
}
return [SeeAby $Quoi $Nom]
set Fichier "BidonBidon"
if { [YaPABdans $Nom] } { set Fichier "$RepertoireDuGenome/msf/$Nom" }
if { [regexp {TROU[0-9]*[A-F]} $Nom] } { set Fichier "$RepertoireDuGenome/trousmsf/$Nom" }
if { [regexp {TROU[0-9]*N} $Nom] } { set Fichier "$RepertoireDuGenome/trousmsf/$Nom" }
if { [regexp {TRNA|ARN} $Nom] } { set Fichier "$RepertoireDuGenome/msf/$Nom" }
if {[file exists $Fichier]} {
return [SeeAby Show $Nom]
}
if { [YaPABdans $Nom] } { set Fichier "$RepertoireDuGenome/prottfa/$Nom" }
if { [regexp {TROU[0-9]*[A-F]} $Nom] } { set Fichier "$RepertoireDuGenome/trousprottfa/$Nom" }
if { [regexp {TROU[0-9]*N} $Nom] } { set Fichier "$RepertoireDuGenome/nuctfa/$Nom" }
if { [regexp {TRNA|ARN} $Nom] } { set Fichier "$RepertoireDuGenome/nuctfa/$Nom" }
if {[file exists $Fichier]} {
return [AfficheFichier $Fichier "AvecSeeBlastAvecBlasteAvecFormate"]
}
if { [YaPABdans $Nom] } { set Fichier "$RepertoireDuGenome/ver/$Nom" }
if { [regexp {TROU[0-9]*[A-F]} $Nom] } { set Fichier "$RepertoireDuGenome/trousprottfa/$Nom" }
if { [regexp {TROU[0-9]*N} $Nom] } { set Fichier "$RepertoireDuGenome/nuctfa/$Nom" }
if { [regexp {TRNA|ARN} $Nom] } { set Fichier "$RepertoireDuGenome/nuctfa/$Nom" }
if {[file exists $Fichier]} {
return [AfficheFichier $Fichier "AvecSeeBlastAvecBlasteAvecFormate"]
}
}
proc BoiteDuCourant {K X Y} {
global MemoBoiteDuCourantKXY MemoBoiteDuCourantRetour
if {[info exists MemoBoiteDuCourantKXY] && $MemoBoiteDuCourantKXY=="$K$X$Y"} {
return $MemoBoiteDuCourantRetour
}
set MemoBoiteDuCourantKXY "$K$X$Y"
set MemoBoiteDuCourantRetour ""
set x [$K canvasx $X]
set y [$K canvasy $Y]
set Courants [$K find withtag current]
foreach Id $Courants {
set SesTags [$K gettags $Id]
if { [lindex $SesTags 0] == "Box" } {
set MemoBoiteDuCourantRetour [lindex $SesTags 1]
break
}
if { [lindex $SesTags 0] == "TEXTE" } {
set MemoBoiteDuCourantRetour [StringApres "Txt_" dans [lindex $SesTags 1]]
break
}
}
return $MemoBoiteDuCourantRetour
}
proc BoundingBoxDuGenome {} {
global BoundingBoxDuGenome
if { ! [info exists BoundingBoxDuGenome]} {
set DF [BoundingBox [ListeDeBoites]]
scan $DF "%d %d" xDebut xFin
set xDebut [Maxi 0 [expr $xDebut-3000]]
incr xFin 1000
set BoundingBoxDuGenome "$xDebut $xFin"
}
return $BoundingBoxDuGenome
}
proc BoundingBox UneListeDeBoites {
set xMin 999999999
set xMax -999999999
foreach Boite $UneListeDeBoites {
set xMin [Mini $xMin [Box $Boite debut]]
set xMax [Maxi $xMax [Box $Boite fin]]
}
return "$xMin $xMax"
}
proc Box {Boite Arg {Valeur ""}} {
global ContenusDesBox
global ListeDeBoites
if { $Valeur != "" } {
set ContenusDesBox($Boite,$Arg) $Valeur
return $Valeur
}
if { ! [info exists ListeDeBoites]} { ChargeListeDeBoites }
if { ! [info exists ContenusDesBox($Boite,$Arg)] } { return "" }
return [set ContenusDesBox($Boite,$Arg)]
}