# HDA Homolog Detection Agreement, X-HDA and its Clusters proc CorrigeBspBaph {} { exit file mkdir "[RepertoireDuGenome]/bilan_xhda_new" foreach Nom [ListeDesPABs] { set Fichier "[RepertoireDuGenome]/bilan_xhda/$Nom" if { ! [file exists $Fichier]} { continue } set Nouveau {} foreach Ligne [LesLignesDuFichier $Fichier] { if {[regexp -nocase " BSP " $Ligne]} { continue } if {[regexp -nocase " BAPH " $Ligne]} { regsub -nocase " BAPH " $Ligne " BSP " LigneBSP lappend Nouveau $LigneBSP } lappend Nouveau $Ligne } Espionne [SauveLesLignes $Nouveau dans "[RepertoireDuGenome]/bilan_xhda_new/$Nom"] } Espionne "Il faut encore renommer bilan_xhda_new" exit foreach O [FamiliarOrganism "LaListeMerci"] { FaireLire "On y va pour $O" set Court [string totitle [Glossaire $O Court]] if {$Court=="Saur"} { set Court "Saur2" } foreach Type [list blastp tblastn msf] { set FichierOO "/genomics/$Court/fiches/oo$Type" if { ! [file exists $FichierOO]} { continue } set Vieux [Garde $FichierOO] Espionne $Vieux set Nouveau {} foreach Ligne [LesLignesDuFichier $Vieux] { if {[regexp "BAPH BAPH " $Ligne]} { regsub "BAPH BAPH " $Ligne "BSP BAPH " Ligne } if {[regexp "Baph Baph " $Ligne]} { regsub "Baph Baph " $Ligne "Bsp Baph " Ligne } if {[regexp "baph baph " $Ligne]} { regsub "baph baph " $Ligne "bsp baph " Ligne } lappend Nouveau $Ligne } Espionne [SauveLesLignes $Nouveau dans $FichierOO] } } } proc DpcShow {{FichierDesProfils ""} {FichierTextOnX ""}} { if {$FichierDesProfils==""} { set RepXHDA "[RepertoireDuGenome]/xhda" set FichierDesProfils "$RepXHDA/TousLesBilans_PourNuca.dpc" } if {! [file exists $FichierDesProfils]} { set FichierDesProfils [ButineArborescence "All"] if {$FichierDesProfils==""} { return "" } } if {$FichierTextOnX==""} { set FichierTextOnX "[RepertoireDuGenome]/xhda/OrgaOrdonne.nuca" if { ! [file exists $FichierTextOnX]} { set FichierTextOnX "" } } Espionne "exec dpc_show $FichierDesProfils $FichierTextOnX &" exec dpc_show $FichierDesProfils $FichierTextOnX & } proc ListeDesFamilles {} { set LesFamilles {} foreach Fichier [glob -nocomplain "[RepertoireDuGenome]/xhda/famille/*.fam"] { set Queue [file tail $Fichier] regsub ".fam$" $Queue "" Famille lappend LesFamilles $Famille } return $LesFamilles } proc CoherenceDesFamilles {} { set FichierCoherenceDesFamilles "[RepertoireDuGenome]/xhda/coherence_des_familles" foreach Famille [ListeDesFamilles] { set LesChefsDeFamille $Famille set LesMembres [LesMembresDeLaFamille $Famille] Espionne "\n\nVcho $LesMembres" if {$LesMembres=={}} { continue } catch {unset MesPABs} catch {unset SesPABs} set LesPABs {} foreach {GDB Membre} $LesMembres { lappend LesPABs $Membre set EstMembre($Famille,$Membre) 1 } foreach {GDB Membre} $LesMembres { set SesMembres [QuestionDeScience $GDB "ret LesMembresDeLaFamille $Membre"] if {$SesMembres=={}} { continue } set Chef $Membre lappend LesChefsDeFamille $Chef foreach {GDBautre Autre} $SesMembres { lappend LesPABs $Autre set EstMembre($Chef,$Autre) 1 } } set LesChefsDeFamille [lsort -unique $LesChefsDeFamille] set LesPABs [lsort -unique $LesPABs] set LesLignes {} foreach Chef $LesChefsDeFamille { set Ligne [format "%9s :" $Chef] foreach PAB $LesPABs { regsub -all "." $PAB "." Vide if {[info exists EstMembre($Chef,$PAB)]} { set Mot $PAB } else { set Mot $Vide } append Ligne " $Mot" } lappend LesLignes "$Famille $Ligne" } Espionne "" EspionneL $LesLignes set Texte [join $LesLignes "\n"] AppendAuFichier $FichierCoherenceDesFamilles $Texte } } proc HomologDetectionAgreement {Nom {Quoi "Value"}} { global HomologDetectionAgreement if {$Nom=="Reset" || $Quoi=="Reset"} { if {[info exists HomologDetectionAgreement]} { unset HomologDetectionAgreement } ChoixDesGenomesCompletsPresentsAbsents Ask [LesGenomesComplets] return } if { ! [info exists HomologDetectionAgreement(Value,Value)]} { set VaCoSi [list \ "NoValue" "white" "HomDetectionAgree NoValue" \ "AllAbsent" "red" "HomDetectionAgree AllAbsent" \ "AllPresent" "green" "HomDetectionAgree AllPresent" \ "AtLeastOneMistake" "yellow" "HomDetectionAgree AtLeastOneMistake" \ "Variable" "orange" "HomDetectionAgree Variable" \ "IncoherentValue" "grey" "HomDetectionAgree IncoherentValue" ] foreach {Va Co Si} $VaCoSi { set HomologDetectionAgreement($Va,Value) $Va set HomologDetectionAgreement($Va,Color) $Co set HomologDetectionAgreement($Va,Signif) $Si } } if {[info exists HomologDetectionAgreement($Nom,Value)]} { set V [set HomologDetectionAgreement($Nom,Value)] return [set HomologDetectionAgreement($V,$Quoi)] } if {[info exists HomologDetectionAgreement("EstCharge",Value)]} { set V [set HomologDetectionAgreement("EstCharge",Value)] return [set HomologDetectionAgreement($V,$Quoi)] } set LesGENO [ChoixDesGenomesCompletsPresentsAbsents] set LesGeno {} foreach G $LesGENO { lappend LesGeno [string totitle $G] } Espionne "I'll create HomologDetectionAgreement for [join $LesGeno " "]" foreach NomLu [ListeDesPABs] { set OoN " [ORGAorgaDesTBlastNs $NomLu] " set OoP " [ORGAorgaDesBlastPs $NomLu] " set OoMA " [ORGAorgaDesMSFs $NomLu] " if {[info exists R]} { unset R } if {[info exists OldAbsent]} { unset OldAbsent } if {[info exists OldPresent]} { unset OldPresent } set Absent 0 set Present 0 set Autre 1 foreach GENO $LesGENO Geno $LesGeno { set N [regexp " $GENO " $OoN] set P [regexp " $GENO " $OoP] set M [regexp " $Geno " $OoMA] set A [regexp " $GENO " $OoMA] if {$A} { set P 1 } if { ! $N && ! $P } { continue } set Absent [expr !$P && !$N && !$A] set Present [expr $P && $N && $A] set Mistake [expr !$P && $N && !$A] set Autre [expr !$Absent && !$Present && !$Mistake] if { $Mistake } { set R "AtLeastOneMistake" ; break } if { $Autre } { set R "Variable" ; continue } if { ! [info exists OldAbsent]} { set OldAbsent $Absent } if { ! [info exists OldPresent]} { set OldPresent $Present } if {$Absent !=$OldAbsent} { set R "Variable" ; continue } if {$Present!=$OldPresent} { set R "Variable" ; continue } } if { ! [info exists R]} { if {$Absent } { set R "AllAbsent" } if {$Present} { set R "AllPresent" } if { $Autre } { set R "Variable" } } set HomologDetectionAgreement($NomLu,Value) $R } set HomologDetectionAgreement("EstCharge",Value) "NoValue" return [HomologDetectionAgreement $Nom $Quoi] } proc AfficheBilanXHda {{Selection ""}} { global RepertoireDuGenome Wup "Affiche parmi la liste des bilans, ceux voulus" set RepBilan "$RepertoireDuGenome/bilan_xhda" if {$Selection==""} { foreach FichierBilan [glob -nocomplain "$RepBilan/*"] { set LeBilan [File tail $FichierBilan] lappend LesBilans $LeBilan } set Selection [ChoixDesPresents [lsort $LesBilans]] } set Selection [join $Selection "\n"] return [CreeEtAfficheUnBilanHDACroises $Selection] } proc CreeEtAfficheUnBilanHDACroises {Selection {Option ""}} { global RepertoireDuGenome set Liste {} foreach Ligne [split $Selection "\n"] { scan $Ligne "%s" Nom lappend Liste $Nom } if {$Liste=={}} { return "" } set FichierBilan "[TmpFile].bilan" set FichierBilan [CreeUnBilanHDACroises $Liste $FichierBilan] #Jean a rajouter Option et le if if {$Option=="AvecTri"} { return [ShowHDACroises $FichierBilan "Delete" "AvecTri"] } return [ShowHDACroises $FichierBilan "Delete"] } proc CreeUnBilanHDACroises {Liste {FichierACreer ""}} { global RepertoireDuGenome if {$FichierACreer==""} { FaireLire "Please give the file name to create" set FichierACreer [Entre "$RepertoireDuGenome/Bilan/bilan_"] } if {$FichierACreer==""} { return "" } set LesBons {} foreach Nom $Liste { set FichierBilan "$RepertoireDuGenome/bilan_xhda/$Nom" if { ! [file exists $FichierBilan]} { continue } LConcat LesBons [LesLignesDuFichier $FichierBilan] } return [SauveLesLignes $LesBons dans $FichierACreer] } proc DisplayBilanHDACroises {K Index} { global IndexDisplayBilanHDACroises if { ! [info exists IndexDisplayBilanHDACroises($K)]} { set IndexDisplayBilanHDACroises($K) 2 } if {$Index == $IndexDisplayBilanHDACroises($K) } { set Efface 1 set IndexDisplayBilanHDACroises($K) 9999 } else { set Efface 0 set IndexDisplayBilanHDACroises($K) $Index } foreach Id [$K find withtag "TexteRang"] { if {$Efface} { set Texte " " } else { set MesTags [$K gettags $Id] set TexteDevoile [lindex $MesTags 1] set A "coucou" set P "voila" scan $TexteDevoile "%s %s %s %s %s %s" G E F N P A if {$P=="voila"} { set A $N set P $F set N $E set F $G set E "unknown" set G "Unknown" } if {$A=="coucou"} { set A $P set P $N set N $F set F $E set E "unknown" set G "Unknown" } set Texte [lindex [list bidon $N $P $A] $Index] } $K itemconfigure $Id -text $Texte } } proc ShowHDACroises {{Fichier ""} {Delete ""} {Option ""}} { set Fichier [LectureBilanHDACroises LesFamilles LesOrgCibles Bilan $Fichier] if {$Fichier=={}} { return "" } if {$Delete=="Delete"} { File delete -force $Fichier set Fichier "X-hda" } #Jean a rajoute if {$Option=="AvecTri"} { set LesXs $LesFamilles set LesYs $LesOrgCibles set Ordre "SampledBAE" set LesGenoTries [LesGenomesDansLeBonOrdre $Ordre] foreach Y $LesYs { set JExiste($Y) 1 } foreach G $LesGenoTries { set Y [string toupper [Glossaire $G Court]] if { ! [info exists JExiste($Y)]} { continue } lappend LesYsTries $Y } #set Fichier [File tail $Fichier] set LesFamilles $LesXs set LesOrgCibles $LesYsTries } return [DessineBilanHDACroises $LesFamilles $LesOrgCibles Bilan $Fichier] } proc SauveBilanHDACroisesDuCanvas {K {Fichier ""}} { global MemoBilanHDACroises set LesXs [set MemoBilanHDACroises($K,LesXs)] set LesYs [set MemoBilanHDACroises($K,LesYs)] foreach {C V} [array get MemoBilanHDACroises] { regsub "$K," $C "" C set T($C) $V } return [SauveBilanHDACroises $LesXs $LesYs T $Fichier] } proc SauveBilanHDACroises {LesFamilles LesOrgCibles aBilan {Fichier ""}} { upvar $aBilan Bilan global RepertoireDuGenome set FichierDefaut "$RepertoireDuGenome/fiches/bilan_hda_croises" if {$Fichier=="AskForFile"} { set Fichier [FichierPourSaveAs $FichierDefaut] if {$Fichier==""} { return "" } } if {$Fichier==""} { set Fichier $FichierDefaut } set Sortie [list] foreach Fam $LesFamilles { foreach Org $LesOrgCibles { lappend Sortie "$Fam $Org [join [set Bilan($Fam,$Org)] " "]" } } return [SauveLesLignes $Sortie dans $Fichier] } proc LectureBilanHDACroises {aLesFamilles aLesOrgCibles aBilan {Fichier ""}} { global RepertoireDuGenome upvar $aLesFamilles LesFamilles upvar $aLesOrgCibles LesOrgCibles upvar $aBilan Bilan set LesFamilles [list] set LesOrgCibles [list] set FichierDefaut "$RepertoireDuGenome/fiches/bilan_hda_croises" if {$Fichier=="AskForFile"} { set Fichier [ButineArborescence "All" $FichierDefaut] if {$Fichier==""} { return "" } } if {$Fichier==""} { set Fichier $FichierDefaut } if {![file exists $Fichier]} {return ""} foreach Ligne [LesLignesDuFichier $Fichier] { scan $Ligne "%s %s %s %s %s" Fam Org TblastN BlastP Jaune set Bilan($Fam,$Org) [list $TblastN $BlastP $Jaune] if {![info exists DejaVuF($Fam)]} { lappend LesFamilles $Fam set DejaVuF($Fam) 1 } if {![info exists DejaVuO($Org)]} { lappend LesOrgCibles $Org set DejaVuO($Org) 1 } } return $Fichier } proc AffichePourLaFamilleHDACroises {K Quoi} { set Id [$K find withtag current] set MesTags [$K gettags $Id] set Famille [lindex $MesTags 1] if {$Quoi==1} { if {[EstUnPAB $Famille]} {return [SearchOnBoard $Famille]} set LesMembres [LesMembresDeLaFamilleHDACroises $Famille] return [AfficheVariable [join $LesMembres "\n"] "" "HDA_family_members_$Famille"] } if {$Quoi==2} { if {[EstUnPAB $Famille]} {return [AfficheLesMembresDeLaFamille $Famille]} } if {$Quoi==3} { if {[EstUnPAB $Famille]} {return [AfficheLeClusterXHda $Famille]} } return "" } proc TriBilanHDACroises {K Index SurQui} { global MemoBilanHDACroises set LesXs [set MemoBilanHDACroises($K,LesXs)] set LesYs [set MemoBilanHDACroises($K,LesYs)] foreach {C V} [array get MemoBilanHDACroises] { regsub "$K," $C "" C set T($C) $V } if {$SurQui=="SurOrganisme"} { set Ordres {"bidon" "BAE" "SampledBAE" "Alpha"} set Ordre [lindex $Ordres $Index] set LesGenoTries [LesGenomesDansLeBonOrdre $Ordre] foreach Y $LesYs { set JExiste($Y) 1 } set LesVYs {} foreach G $LesGenoTries { set Y [string toupper [Glossaire $G Court]] if { ! [info exists JExiste($Y)]} { continue } lappend LesYsTries $Y } set Titre "X-HDA sorted by Organisms ($Ordre)" return [DessineBilanHDACroises $LesXs $LesYsTries T $Titre] } if {$SurQui=="SurFamille"} { set Id [$K find withtag current] set MesTags [$K gettags $Id] set Famille [lindex $MesTags 1] set LesVYs {} foreach Y $LesYs { set V [set T($Famille,$Y)] set VY [split $V " "] lappend VY $Y lappend LesVYs $VY set YduVY($VY) $Y } set LesVYsTries [lsort -decreasing -index [expr $Index-1] -integer $LesVYs] set LesYsTries {} foreach VY $LesVYsTries { set Y [set YduVY($VY)] lappend LesYsTries $Y } set Titre "X-HDA sorted by $Famille ($Index)" return [DessineBilanHDACroises $LesXs $LesYsTries T $Titre] } if {$SurQui=="SurLaMoyenne"} { Wup "il faut trier LesXs en fonction de la valeur du Bilan" set Id [$K find withtag current] set MesTags [$K gettags $Id] set Complet [lindex $MesTags 0] set Orga [lindex $MesTags 1] set LesVXs {} foreach X $LesXs { set Famille $X set V [set T($Famille,$Orga)] set VX [split $V " "] lappend VX $X lappend LesVXs $VX set XduVX($VX) $X } set LesVXsTries [lsort -decreasing -index [expr $Index-1] -integer $LesVXs] set LesXsTries {} foreach VX $LesVXsTries { set X [set XduVX($VX)] lappend LesXsTries $X } set Titre "X-HDA sorted with $Complet ($Index)" return [DessineBilanHDACroises $LesXsTries $LesYs T $Titre] } } proc DevoileLesValeursHDACroises {K X Y Action} { global RepertoireDuGenome regsub ".canvas" $K ".message" M catch {destroy $M} if {$Action=="Leave"} { return "" } set Id [$K find withtag current] set MesTags [$K gettags $Id] set Texte [lindex $MesTags 1] message $M -borderwidth 3 -font {Courier 8} -relief raise -width 800 -text $Texte -background "lightyellow" -foreground "black" if {$X>400} { set EW "e" } else { set EW "w" } if {$Y< 50} { set EW "n$EW" } place $M -x $X -y [expr $Y-20] -anchor $EW return $M } proc TexteHDACroises {V Fam Orga {Quoi ""}} { if {$Quoi=="Devoile"} { return "$Fam $Orga [join $V " "]" } set T [lindex $V 0] set P [lindex $V 1] set J [lindex $V 2] if {1 || [CouleurHDACroises $V]=="O"} { return "$P" } return " " } proc DessineBilanHDACroises {LesXs LesYs aT {Titre ""} {PourGif ""}} { upvar $aT T global RepertoireDuGenome global MemoBilanHDACroises if {$Titre==""} { set Titre "Cross-linked Homolog Detection Agreement" } if {[regexp "/" $Titre]} { set Titre [file tail $Titre] } set LC 25 set HL 20 set nLignes [llength $LesYs] set nColonnes [llength $LesXs] set CouleursHDA(O) "orange" set CouleursHDA(B) "blue" set CouleursHDA(V) "green" set CouleursHDA(R) "red" set CouleursHDA(J) "yellow" set CouleursHDA(LJ) "lightyellow" set Fonte {Courier 15} set TailleTexteOrga [font measure $Fonte [string repeat "M" 26]] set EspacementHorizontal 15 set EspaceVertical 40 set PosYEntete [expr $EspaceVertical/4] set DecalageDesRectangles [expr $EspacementHorizontal + $TailleTexteOrga + $EspacementHorizontal] set LargeurVoulue [expr $DecalageDesRectangles + $nColonnes*$LC + $EspacementHorizontal] set HauteurVoulue [expr $EspaceVertical + ($nLignes+3)*$HL] if {$PourGif != ""} { set PourGif 1 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 PourGif 0 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 K [UnCanva $LargeurVoulue $HauteurVoulue $LargeurVoulue $HauteurVoulue "GonfleAussiY"] regsub ".canvas" $K "" w wm title $w "$Titre" wm iconname $w "$Titre" } set MemoBilanHDACroises($K,LesXs) $LesXs set MemoBilanHDACroises($K,LesYs) $LesYs foreach {C V} [array get T] { if {$C=="LesXs" || $C=="LesYs"} { continue } set MemoBilanHDACroises($K,$C) $V } $K configure -background "lightgrey" $K create rectangle 0 0 $LargeurVoulue $HauteurVoulue -fill grey -tags [list "Cadre"] $K create text \ [expr $DecalageDesRectangles/2] [expr $EspaceVertical/2] \ -width 300 \ -text $Titre \ -font {Courier 12} \ -anchor c set iEmeOrga 0 set MettreEntete 1 set MettreEnpied 0 foreach Orga [concat $LesYs [list "LigneSupplementaire"]] { if {$Orga=="LigneSupplementaire"} { set MettreEnpied 1 incr iEmeOrga } else { set Couleur "black" set Complet [Glossaire $Orga Complet] set Phylum [PhylumDuGenome $Complet] if {$Phylum=="X"} { set Phylum [PhylumDuOrganisme $Complet] } set Couleur "black" if {$Phylum=="B"} { set Couleur "darkgreen" } if {$Phylum=="A"} { set Couleur "blue" } if {$Phylum=="E"} { set Couleur "red" } if {[SampledOrganism $Orga]} { set Couleur "darkorange" } incr iEmeOrga set TexteOrga [string range $Complet 0 25] $K create text \ $EspacementHorizontal [expr $EspaceVertical + $iEmeOrga*$HL] \ -text $TexteOrga \ -anchor w \ -font $Fonte \ -tags [list "$Complet" "$Orga" "TexteOrga" "Ligne_$iEmeOrga"] \ -fill $Couleur } set ValeurVide "" set Colonne 0 set Rang 0 foreach X $LesXs { incr Colonne incr Rang if {$MettreEntete || $MettreEnpied} { if {$MettreEnpied} { set PosYEntete [expr $EspaceVertical + $iEmeOrga*$HL] } set PosX [expr $DecalageDesRectangles + $Colonne*$LC] set Texte $X $K create text \ $PosX $PosYEntete \ -width 20 \ -text $Texte \ -font {Courier 6} \ -anchor n \ -tags [list "Famille" $Texte "TexteOrga"] \ -fill "black" } if {[info exists T($X,$Orga)]} { set V [set T($X,$Orga)] } else { set V $ValeurVide } if { $V == $ValeurVide} { continue } set Couleur [set CouleursHDA([CouleurHDACroises $V])] set Texte [TexteHDACroises $V $X $Complet] set TexteDevoile [TexteHDACroises $V $X $Complet Devoile] if {$PourGif} { set LesTags [list "WebClic" "gscope:AfficheLesConcernesDeCeRang \{$Complet\} $V $Rang Coucou"] } else { set LesTagsR [list $Complet $TexteDevoile $Rang "Affichable" "Ligne_$iEmeOrga"] set LesTagsT [list $Complet $TexteDevoile $Rang "TexteRang" "Affichable" "Ligne_$iEmeOrga"] } set PosX [expr $DecalageDesRectangles + $Colonne*$LC] $K create rect \ [expr $PosX-$LC/3] [expr $EspaceVertical + $iEmeOrga*$HL-$HL/3] \ [expr $PosX+$LC/3] [expr $EspaceVertical + $iEmeOrga*$HL+$HL/3] \ -tags $LesTagsR \ -outline $Couleur \ -fill $Couleur $K create text \ [expr $PosX+$LC/3] [expr $EspaceVertical + $iEmeOrga*$HL] \ -text $Texte \ -font {Courier 6} \ -anchor e \ -tags $LesTagsT \ -fill "black" } set MettreEntete 0 } $K configure -height [expr $EspaceVertical + ($iEmeOrga+2)*$HL] set B [BoutonneLaFenetre $w "Hide Both/Org/Val\n Sort BAE/SmplBAE/Alph\nAverage tN/P/abs"] bind $B <1> "ToggleTextePhylo $K Both" bind $B <2> "ToggleTextePhylo $K Orga" bind $B <3> "ToggleTextePhylo $K Rank" bind $B "TriBilanHDACroises $K 1 SurOrganisme" bind $B "TriBilanHDACroises $K 2 SurOrganisme" bind $B "TriBilanHDACroises $K 3 SurOrganisme" bind $B "TriBilanHDACroises $K 1 SurLaMoyenne" bind $B "TriBilanHDACroises $K 2 SurLaMoyenne" bind $B "TriBilanHDACroises $K 3 SurLaMoyenne" $B configure -background "green" set B [BoutonneLaFenetre $w "Save X-HDA\nOther Show/Ask/New\nDisplay tN/P/A"] bind $B <1> "SauveBilanHDACroisesDuCanvas $K AskForFile" bind $B "ShowHDACroises {}" bind $B "ShowHDACroises AskForFile" bind $B "NewHDACroises" bind $B "DisplayBilanHDACroises $K 1" bind $B "DisplayBilanHDACroises $K 2" bind $B "DisplayBilanHDACroises $K 3" $B configure -background "green" $K bind "Famille" <1> "AffichePourLaFamilleHDACroises $K 1" $K bind "Famille" <2> "AffichePourLaFamilleHDACroises $K 2" $K bind "Famille" <3> "AffichePourLaFamilleHDACroises $K 3" $K bind "Famille" "TriBilanHDACroises $K 1 SurFamille" $K bind "Famille" "TriBilanHDACroises $K 2 SurFamille" $K bind "Famille" "TriBilanHDACroises $K 3 SurFamille" $K bind "TexteOrga" "TriBilanHDACroises $K 1 SurLaMoyenne" $K bind "TexteOrga" "TriBilanHDACroises $K 2 SurLaMoyenne" $K bind "TexteOrga" "TriBilanHDACroises $K 3 SurLaMoyenne" $K bind "Affichable" "DevoileLesValeursHDACroises $K %x %y Enter" $K bind "Affichable" "DevoileLesValeursHDACroises $K %x %y Leave" $K bind "Affichable" <1> "" $K bind "Affichable" "ChangeOrdrePhylo $K %x %y $HL -1 $iEmeOrga" $K bind "Affichable" "ChangeOrdrePhylo $K %x %y $HL 1 $iEmeOrga" if {$PourGif } { return $LesOrdresPourGif } if { 0 && [PourWscope] } { return $w } else { return $K } } proc LesAccessDesOrganismesSample {Nom {Quoi ""}} { global MemoLesAccessTarget MemoLesOrganismesTarget MemoNomTarget if {$Quoi==""} { set Quoi "LesAccessMerci" } if {$Quoi=="LesOrganismesMerci" && [info exists MemoNomTarget] && $MemoNomTarget==$Nom} { return $MemoLesOrganismesTarget } if {$Quoi=="LesAccessMerci" && [info exists MemoNomTarget] && $MemoNomTarget==$Nom} { return $MemoLesAccessTarget } set LesAccess {} set LesOrganismes {} foreach Organisme [SampledOrganism LaListeMerci] { set Bid "" set Acc "" scan [BidAccessDeLOrganisme $Organisme $Nom] "%s %s" Bid Acc if {$Acc==""} { continue } lappend LesOrganismes $Organisme lappend LesAccess $Acc } set MemoNomTarget $Nom set MemoLesAccessTarget $LesAccess set MemoLesOrganismesTarget $LesOrganismes if {$Quoi=="LesAccessMerci"} { return $LesAccess } if {$Quoi=="LesOrganismesMerci"} { return $LesOrganismes } return $LesAccess } proc BidAccessDeLOrganisme {Orga Nom} { global RepertoireDuGenome regsub "_" $Orga " " Orga set APNsOnly 1 set SeuilExpect 0.001 set MaxListe 250 if {[info exists BidAccessDeLOrganisme(Courant)] && [set BidAccessDeLOrganisme(Courant)]!=$Nom} { unset BidAccessDeLOrganisme set BidAccessDeLOrganisme(Courant) $Nom } if {[info exists BidAccessDeLOrganisme($Nom,$Orga)]} { return [set BidAccessDeLOrganisme($Nom,$Orga)] } if {[info exists BidAccessDeLOrganisme($Nom,"EstCharge")]} { return "" } set FichierAPNs "[RepertoireDuGenome]/apns/$Nom" if {[file exists $FichierAPNs]} { set nLu 0 foreach Ligne [LesLignesDuFichier $FichierAPNs] { incr nLu scan $Ligne "%s %s %s" BanqueId Access Expect if {[EstUnAccessPDB $BanqueId]} { continue } if {$Expect > $SeuilExpect} { break } if {$nLu > $MaxListe } { break } set GEs "" regsub " *$BanqueId +$Access +$Expect *" $Ligne "" GEs if { ! [regexp -nocase {[a-z]} $GEs]} { continue } set LesGEs [split $GEs ":"] foreach GE $LesGEs { if {[info exists DejaVu($GE)]} { continue } set DejaVu($GE) 1 set BidAccessDeLOrganisme($Nom,$GE) "$BanqueId $Access $Expect" } } } if {[info exists BidAccessDeLOrganisme($Nom,$Orga)]} { return [set BidAccessDeLOrganisme($Nom,$Orga)] } if {$APNsOnly} { return "" } set OBP [OrthoBlastP $Nom $Orga] if {$OBP != "OrthoBlastPNonValide"} { if { ! $OBP } { return "" } set LesOs [OrthoBlastP $Nom] regsub " " $Orga "_" GenreEspece set i [lsearch $LesOs $GenreEspece] set Fichier "$RepertoireDuGenome/blastp/$Nom" if { ! [file exists $Fichier]} { return "" } DecortiqueBlast $Fichier 0.001 "SansLimiteDeNombre" Query lBanqueId lAccess lDE lProfil lPN Espionne "Recherche de $Orga en $i ratee" set LesBids [Zippe [lrange $lBanqueId $i end] [RetourneLaListe [lrange $lBanqueId 0 [expr $i-1]]]] set LesAccs [Zippe [lrange $lAccess $i end] [RetourneLaListe [lrange $lAccess 0 [expr $i-1]]]] foreach Bid $LesBids Access $LesAccs { foreach Organisme [split [OrgaDuAccess $Access Complet $Bid] ":"] { if {[Glossaire $Organisme Complet]==$Orga} { return "$Bid $Access" } } } return "" } return "" } proc AfficheLesMembresDeLaFamille Nom { set MembresDeLaFamille [LesMembresDeLaFamille $Nom] set Texte [join $MembresDeLaFamille "\n"] set Fen [AfficheVariable $Texte "AvecRien" "${Nom}Les Membres de sa Famille"] #Jean a rajoute set B [BoutonneLaFenetre $Fen "X-HDA Sel/Sort\nAll/Sort\nInfo Cluster//DpcShow"] #set B [BoutonneLaFenetre $Fen "Show X-HDA sel/all"] bind $B <1> "CreeEtAfficheUnBilanHDACroises \[selection get\]" bind $B <2> "CreeEtAfficheUnBilanHDACroises \[selection get\] AvecTri" bind $B "CreeEtAfficheUnBilanHDACroises \[set PagePropre($Fen)\]" bind $B "CreeEtAfficheUnBilanHDACroises \[set PagePropre($Fen)\] AvecTri" bind $B "AfficheLesInfosDuCluster" bind $B "DpcShow" $B configure -background "green" return $Fen } proc AfficheLeClusterXHda Nom { set LeClusterXHda [LeClusterXHda $Nom] if {$LeClusterXHda=={}} { FaireLire "No cluster available" return "" } foreach PAB $LeClusterXHda { set DE [DefinitionApproximative $PAB] lappend LeTexte "$PAB $DE" } #Jean a rajoute Tri et bind3 set Texte [join $LeTexte "\n"] set Fen [AfficheVariable $Texte "AvecRien" "${Nom}_X-HDA_cluster"] set B [BoutonneLaFenetre $Fen "X-HDA Sel/Sort\nAll/Sort\nInfoClust/OntoClust/Dpc"] bind $B <1> "CreeEtAfficheUnBilanHDACroises \[selection get\]" bind $B <2> "CreeEtAfficheUnBilanHDACroises \[selection get\] AvecTri" bind $B "CreeEtAfficheUnBilanHDACroises \[set PagePropre($Fen)\]" bind $B "CreeEtAfficheUnBilanHDACroises \[set PagePropre($Fen)\] AvecTri" bind $B "AfficheLesInfosDuCluster" bind $B "OntologyDesClusters \[set PagePropre($Fen)\]" bind $B "DpcShow" $B configure -background "green" return $Fen } proc OntologyDesClusters {Selection} { foreach Ligne [split $Selection "\n"] { scan $Ligne "%s" Nom lappend Liste $Nom } if {$Liste=={}} { return "" } IllustreOntologyDesBoitesGscope $Liste } proc AfficheLesInfosDuCluster {} { set ClusterOuNom [Entre "ClusterOuNom: "] if {[regexp "^ClusterOuNom:" $ClusterOuNom]} { regsub "^ClusterOuNom: " $ClusterOuNom "" ClusterOuNom } scan $ClusterOuNom "%s" ClusterOuNom Espionne "Question $ClusterOuNom" set Fen [AfficheVariable [LesInfosDuCluster $ClusterOuNom] "" "Les Info de $ClusterOuNom"] return $Fen } proc InfoDuCluster { {ClusterOuNom ""} {Quoi ""}} { Wup "Rend les membres du cluster Numero X ou du PAB X, sa taille, son numero" global RepertoireDuGenome global MemoTaille MemoLesMembres MemoClusterOuNom MemoNumero if {$ClusterOuNom=="LaListeMerci"} { set Quoi "LaListeMerci" } if {$ClusterOuNom==""} {return "No Query"} if {$Quoi==""} {set Quoi "Membres"} if {$Quoi!="Membres" && $Quoi!="Taille" && $Quoi!="Numero" && $Quoi!="LaListeMerci"} { return "Quoi must be Membres, Taille or Numero" } if {$Quoi=="Membres" && [info exists MemoLesMembres] && $MemoClusterOuNom==$ClusterOuNom} { return $MemoLesMembres } if {$Quoi=="Numero" && [info exists MemoNumero] && $MemoClusterOuNom==$ClusterOuNom} { return $MemoNumero } if {$Quoi=="Taille" && [info exists MemoTaille] && $MemoClusterOuNom==$ClusterOuNom} { return $MemoTaille } set FichierDesClusters "$RepertoireDuGenome/xhda/TousLesBilans_PourNuca.dpc" set LesMembresDuCluster {} set StopSurCluster 0 foreach Ligne [LesLignesDuFichier $FichierDesClusters] { if { ! [regexp -nocase {[a-z]+} $Ligne] || [regexp -nocase "^Number of clusters" $Ligne]} { continue } if {[regexp -nocase {^Cluster} $Ligne]} { if {$StopSurCluster} { break } set LesMembresDuCluster {} scan $Ligne "%s %s %s" Groupe Numero Taille lappend LesNumeros $Numero regsub "$Groupe +$Numero +; +size=" $Ligne "" Taille #if {! [expr $Numero==$ClusterOuNom]} {continue} if {! [string equal $Numero $ClusterOuNom]} {continue} set StopSurCluster 1 continue } scan $Ligne "%s" PAB lappend LesMembresDuCluster $PAB if {[string equal $PAB $ClusterOuNom]} { set StopSurCluster 1} # if {$PAB==$ClusterOuNom} { set StopSurCluster 1} } if {$Quoi=="LaListeMerci"} {return [lsort -integer -unique $LesNumeros]} if {! [string equal $Numero $ClusterOuNom] && [expr [lsearch -exact $LesMembresDuCluster $ClusterOuNom]<0]} { return "No info available for $ClusterOuNom" } set MemoNumero $Numero set MemoMembres $LesMembresDuCluster set MemoTaille $Taille set MemoClusterOuNom $ClusterOuNom if {$Quoi=="Numero"} {return $Numero} if {$Quoi=="Taille"} {return $Taille} if {$Quoi=="Membres"} {return $LesMembresDuCluster} } proc LesInfosDuCluster { {NomDuCluster ""} } { Wup "Rend la taille et les membres du cluster Numero X ou du PAB X" if {! [regexp -nocase {[a-z]+ || [0-9]+} $NomDuCluster]} {return "No Query"} set LesMembres [InfoDuCluster $NomDuCluster] set Taille [InfoDuCluster $NomDuCluster Taille] set Numero [InfoDuCluster $NomDuCluster Numero] set TexteMembres [join $LesMembres " "] regsub -all "[PreFixe]" $TexteMembres "" TexteMembres return "Cluster $Numero\nTaille: $Taille\nMembres: $TexteMembres" } proc ColorationDesClustersXHdaDesNomsPiques {Nom {Quoi "Couleur"}} { global ColorationDesClustersXHda JeMeSignale if {$Nom=="Reset" && [info exists ColorationDesClustersXHda]} { unset ColorationDesClustersXHda return } if {[info exists ColorationDesClustersXHda($Nom,$Quoi)]} { return [set ColorationDesClustersXHda($Nom,$Quoi)] } if {[info exists ColorationDesClustersXHda]} { if {[info exists ColorationDesClustersXHda("EstCharge",$Quoi)]} { return [set ColorationDesClustersXHda("EstCharge",$Quoi)] } else { return "lightgrey" } } set ColorationDesClustersXHda("EstCharge",Couleur) "grey" set ColorationDesClustersXHda("EstCharge",Signif) "not_in_same_cluster" set LesPiques [LesNomsPiques] if {$LesPiques=={}} { set ColorationDesClustersXHda("EstCharge",Couleur) "white" set ColorationDesClustersXHda("EstCharge",Signif) "no_reference_was_choosen" return [ColorationDesClustersXHdaDesNomsPiques $Nom $Quoi] } set n [llength $LesPiques] set LesCouleurs [CouleursDuBleuAuRouge $n] foreach Pique $LesPiques Couleur $LesCouleurs { set Signif "same cluster as $Pique" set LeClusterXHda [LeClusterXHda $Pique] if {$LeClusterXHda=={}} { continue } set Premier [lindex $LeClusterXHda 0] if {[info exists DejaVu($Premier)]} { continue } set DejaVu($Premier) $Pique foreach PAB $LeClusterXHda { set ColorationDesClustersXHda($PAB,Couleur) $Couleur set ColorationDesClustersXHda($PAB,Signif) $Signif } } return [ColorationDesClustersXHdaDesNomsPiques $Nom $Quoi] } proc LeClusterXHda { Query {Quoi ""} {FichierCluster ""} } { global RepertoireDuGenome global LeClusterXHda if {$Quoi==""} { set Quoi "LesMembres" } if {[info exists LeClusterXHda(Query)] && [set LeClusterXHda(Query)]==$Query} { if {[info exists LeClusterXHda($Quoi)]} { return [set LeClusterXHda($Quoi)] } } if {$FichierCluster==""} { set LesFDPC [glob -nocomplain "$RepertoireDuGenome/xhda/*.dpc"] set FichierCluster [ChoixParmi $LesFDPC] if {$FichierCluster==""} { return {} } } set OnVeutToutLeMonde 0 set OnVeutToutLeMondeAvecGroupe 0 set OutQuery 0 if {$Query=="OnVeutToutLeMonde"} { set OnVeutToutLeMonde 1 } if {$Query=="OnVeutToutLeMondeAvecGroupe"} { set OnVeutToutLeMondeAvecGroupe 1 } set LeGroupe {} set OnLeTient 0 set Numero "" foreach Ligne [LesLignesDuFichier $FichierCluster] { if { ! [regexp -nocase {[a-z]+} $Ligne] || [regexp -nocase "^Number of clusters" $Ligne]} { continue } if {[regexp -nocase {^Cluster [0-9]+|^unclustered seq} $Ligne]} { if {$OnLeTient} { break } set Numero "" scan $Ligne "%s %s" Groupe Numero set Taille [IntegerApres "size=" dans $Ligne] if { ! [regexp {^[0-9]} $Numero]} { set Numero -1 } set LeGroupe {} if {$Query==$Numero} { set OnLeTient 1 } continue } scan $Ligne "%s" Access if {[string toupper $Access]==[string toupper $Query]} { set OnLeTient 1 if {$OutQuery} { continue } } lappend ToutLeMondeAvecGroupe "$Access $Numero" lappend ToutLeMonde $Access lappend LeGroupe $Access } if { ! $OnLeTient } { set LeGroupe {} } set LeClusterXHda(Numero) $Numero set LeClusterXHda(LesMembres) $LeGroupe set LeClusterXHda(Taille) $Taille set LeClusterXHda(Query) $Query if {$Quoi=="Numero" } { return $Numero } if {$Quoi=="Taille" } { return $Taille } if {$OnVeutToutLeMonde} { return $ToutLeMonde } if {$OnVeutToutLeMondeAvecGroupe} { return $ToutLeMondeAvecGroupe } if {$Groupe=="unclustered"} { return $ToutLeMonde } else { return $LeGroupe } } proc CreeLesFamillesDesSelectionnesPourTous {} { return [CreeLesFamillesDesSelectionnes "LaTotale" "NoAsk"] } proc CreeLesFamillesDesSelectionnes {{LaSelection ""} {Ask ""}} { Wup "A partir du Board on selectionne des PABs, ou si rien n'est choisi LaListeDesPABs" Wup "Avec CreeListeCandidatsPour on creer les premiers candidats" Wup "On garde dans stone_NomFam la liste des premiers candidats" Wup "A partir des premiers on fait LaFamilleElargie, sauve dans /famille/nom.fam" Wup "si Ask vide on repond sinon on ne repond pas, LaTotale pour la ListeDesPABs" global RepertoireDuGenome global NotreOS set RepXHDA "$RepertoireDuGenome/xhda" set RepFamille "$RepertoireDuGenome/xhda/famille" set RepStone "$RepFamille/stone" set OrgaChoisi [Glossaire $NotreOS Complet] set UseExisting 1 if {! [File exists $RepXHDA]} { File mkdir $RepXHDA } if {$Ask==""} { set Ask 1 } else { set Ask 0 } if {$LaSelection==""} { set LaSelection [LesNomsPiques] } if {$LaSelection=={} || $LaSelection=="LaTotale"} { if { $Ask && ! [OuiOuNon "Do I use all PABs ? " 0]} { return "" } set LaSelection [ListeDesPABs] } foreach PAB $LaSelection { if {[OnTraiteUneCollection]} { regsub -all "/" [NomDeScene $PAB] "_" Famille } else { set Famille $PAB } if { ! [info exists DejaVu($Famille)]} { lappend LesFamilles $Famille set DejaVu($Famille) 1 } lappend LesPABsDeLaFamille($Famille) $PAB } set LesChoix {} foreach Famille $LesFamilles { foreach PAB [set LesPABsDeLaFamille($Famille)] { lappend LesChoix "$PAB $Famille" } } set Choix [join $LesChoix "\n"] if { $Ask } { set Choix [EntreTexte $Choix] } set Choix [string trim $Choix] if {$Choix==""} { return "" } if {[info exists DejaVu]} { unset DejaVu unset LesFamilles unset LesPABsDeLaFamille } set LesFamilles {} foreach Ligne [split $Choix "\n"] { scan $Ligne "%s %s" PAB Famille if { ! [info exists DejaVu($Famille)]} { lappend LesFamilles $Famille set DejaVu($Famille) 1 } lappend LesPABsDeLaFamille($Famille) $PAB } if {! [file exists "$RepFamille"]} { File mkdir $RepFamille } if {! [file exists "$RepStone"]} { File mkdir $RepStone } foreach Famille $LesFamilles { global NomDuFichierPierre ; set NomDuFichierPierre "$RepStone/stone_$Famille" if {$UseExisting && [file exists $NomDuFichierPierre]} { Espionne "stone_$Famille already exists, I use it." Degrave LesCandidatsDeLaFamille } else { set LesCandidatsDeLaFamille {} foreach PAB [set LesPABsDeLaFamille($Famille)] { set ListePremiersCandidats [CreeListeCandidatsPour $PAB $OrgaChoisi $Famille] LConcat LesCandidatsDeLaFamille $ListePremiersCandidats } set LesCandidatsDeLaFamille [lsort -unique $LesCandidatsDeLaFamille] Grave LesCandidatsDeLaFamille ClosPierre } set CandidatsDUneFamille($Famille) $LesCandidatsDeLaFamille } foreach Famille $LesFamilles { set LesCandidatsDeLaFamille [set CandidatsDUneFamille($Famille)] if {! [file exists $RepFamille]} {File mkdir $RepFamille} set FichierFamille "$RepFamille/$Famille.fam" if {$UseExisting && [file exists $FichierFamille]} { Espionne "$Famille.fam already exists I keep it." continue } SauveLesLignes [LaFamilleElargie $LesCandidatsDeLaFamille $Famille] dans $FichierFamille } unset CandidatsDUneFamille Espionne "Fin" } proc NewHDACroisesPourTous {} { global RepertoireDuGenome set RepFamille "$RepertoireDuGenome/xhda/famille" foreach fichier [lsort [glob -nocomplain "$RepFamille/*.fam"]] { NewHDACroises $fichier "SansDessine" "Sauve" } } proc NewHDACroises {{LeChoixDesFichiersFamille ""} {Ask ""} {Sauve ""}} { Wup "Permet a partir de fichiers .fam de faire le HDA croise, de les afficher et les sauver" global RepertoireDuGenome set LesFamilles {} set LaSelectionProbable {} set RepFamille "$RepertoireDuGenome/xhda/famille" set RepBilan "$RepertoireDuGenome/bilan_xhda" set UseExisting 1 if {$Ask==""} {set Ask 1} else {set Ask 0} if {$Sauve==""} {set Sauve 0} else {set Sauve 1} if {! [file exists $RepBilan]} {File mkdir $RepBilan} global LesOrgsCibles if { ! [info exists LesOrgsCibles]} { set LesOrgsCibles {} foreach ligne [LesGenomesComplets] { lappend LesOrgsCibles [string toupper [Glossaire $ligne Court]] } } if {$LeChoixDesFichiersFamille==""} { foreach file [lsort [glob -nocomplain "$RepFamille/*.fam"]] { set Queue [file tail $file] lappend LaSelectionProbable $file lappend LaSelectionProbableQ $Queue } set LeChoixDesFichiersFamille [ChoixDesPresents $LaSelectionProbable $LaSelectionProbableQ] } if {$LeChoixDesFichiersFamille==""} { return "" } set ListeCandidat {} foreach fichier $LeChoixDesFichiersFamille { if { ! [file exists $fichier] || [file size $fichier]==0} {continue} set ListePourOdile {} set Famille [file tail $fichier] regsub {\.[a-z]+$} $Famille "" Famille if {$UseExisting && [file exists "$RepBilan/$Famille"]} { Espionne "$Famille exists I continue" continue } Espionne "\n$Famille" set ListeCandidat [LesLignesDuFichier $fichier] foreach ligne $ListeCandidat { scan $ligne "%s %s %s" FamilleComplete PAB GDBName lappend ListePourOdile $GDBName lappend ListePourOdile $PAB lappend LesPABs($Famille) $PAB } EspionneL "ListeGDBName_PABs: $ListePourOdile" if {$ListePourOdile=={}} { continue } lappend LesFamilles $Famille BilanHDAParFamille $LesOrgsCibles $Famille $ListePourOdile BilanChiffre } if {$LesFamilles=={}} { return "" } if {$Ask} { DessineBilanHDACroises $LesFamilles $LesOrgsCibles BilanChiffre } if {$Sauve} { set FichierBilanASauver "$RepertoireDuGenome/bilan_xhda/[lindex $LesFamilles 0]" Espionne $FichierBilanASauver SauveBilanHDACroises $LesFamilles $LesOrgsCibles BilanChiffre $FichierBilanASauver } } proc NarcissePourLOrganisme {Access Organisme} { set GName [LesNomsGscopeDeLOrganisme $Organisme] if {$GName == {}} { return "" } set BoiteDuAccess "" foreach nomG $GName { set BoiteDuAccess [QuestionDeScience $nomG "ret Narcisse $Access"] if {$BoiteDuAccess == "" && [regexp -nocase {[a-z]{3}} $Access]} { set LeEmbl [LaSequenceDesBanques $Access $Access accessOk "OnVeutEMBL"] if {$LeEmbl == ""} { continue } set LigneAC [lindex $LeEmbl 1] if { ! [regexp "^AC " $LigneAC]} { continue } scan $LigneAC "%s %s" bidon AC set BoiteDuAccess [QuestionDeScience $nomG "ret Narcisse $AC"] } if {$BoiteDuAccess != ""} { break } } return $BoiteDuAccess } proc CreeListeCandidatsPour {{PABVoulu ""} {CandidatOrga ""} {Famille "famille"}} { Wup "Rend une liste Access Orga pour PABVoulu" set ListeAccessCandidat {} set ListeOrgaCandidat {} set ListeCandidat {} set CandidatAccess [Narcisse $PABVoulu] Espionne "Boite $PABVoulu" Espionne "Orga $CandidatOrga" Espionne "Access Candidat $CandidatAccess" set ListeAccessCandidat [LesAccessDesOrganismesSample $PABVoulu] set ListeOrgaCandidat [LesAccessDesOrganismesSample $PABVoulu "LesOrganismesMerci"] EspionneL "ListeAccessCandidat1 $ListeAccessCandidat" EspionneL "ListeOrgaCandidat2 $ListeOrgaCandidat" foreach AC $ListeAccessCandidat OG $ListeOrgaCandidat { lappend ListeCandidat "$AC $OG" } if { $CandidatAccess != ""} { lappend ListeCandidat "$CandidatAccess $CandidatOrga" } set ListeCandidat [lsort -unique $ListeCandidat] EspionneL "$ListeCandidat" return $ListeCandidat } proc LaFamilleElargie {ListeCandidat {Famille "famille"}} { Wup "Rend la liste complete FamillePoissonPecheurs PAB GDBName pour une liste access-orga" set ListeDesPABs {} foreach Candidat $ListeCandidat { set CandidatAccess [lindex $Candidat 0] set CandidatOrga [lrange $Candidat 1 end] Espionne "\nCandidat $CandidatOrga" Espionne "Access $CandidatAccess" set NomGscope [LesNomsGscopeDeLOrganisme $CandidatOrga] Espionne "Nom Gscope: $NomGscope" foreach nomG $NomGscope { Espionne $nomG if {$nomG == "BsuX"} { continue } if {$nomG == "BiZar"} { continue } if {$nomG == "VchoDemo"} { continue } set BoiteDuGenome [QuestionDeScience $nomG "ret Narcisse $CandidatAccess"] if {$BoiteDuGenome == "" && [regexp -nocase {[a-z]{3}} $CandidatAccess]} { set LeEmbl [LaSequenceDesBanques $CandidatAccess $CandidatAccess accessOk "OnVeutEMBL"] if {$LeEmbl == ""} {continue} scan [lindex $LeEmbl 1] "%s %s" bidon AC set BoiteDuGenome [QuestionDeScience $nomG "ret Narcisse $AC"] } if {$BoiteDuGenome == ""} {continue} Espionne "BoiteDuGenome $BoiteDuGenome" set ListeAccessEnPlus [QuestionDeScience $nomG \ "ret LesAccessDesOrganismesSample $BoiteDuGenome"] set ListeOrgaEnPlus [QuestionDeScience $nomG \ "ret LesAccessDesOrganismesSample $BoiteDuGenome LesOrganismesMerci"] Espionne "coucou1 $ListeAccessEnPlus" Espionne "coucou2 $ListeOrgaEnPlus" foreach AC $ListeAccessEnPlus OG $ListeOrgaEnPlus { #Espionne "$AC $OG" set PAB [NarcissePourLOrganisme $AC $OG] if {$PAB == ""} { continue } lappend ListeDesPABs $PAB lappend AdePAB($PAB) $AC set Poisson [Glossaire $OG Court] set FPP "$Famille $Poisson $nomG" if { ! [info exists FPPdePAB($PAB)] || [lsearch [set FPPdePAB($PAB)] $FPP] < 0} { lappend FPPdePAB($PAB) $FPP } } } } set LesFpPPP {} foreach PAB [lsort -unique $ListeDesPABs] { set LesPecs {} foreach FPP [set FPPdePAB($PAB)] { scan $FPP "%s %s %s" Fam Poi Pec lappend LesPecs $Pec } set Liste [concat [list $Fam $Poi] $LesPecs] set FpPPP [join $Liste "_"] lappend LesFpPPP $FpPPP set PABdeFpPPP($FpPPP) $PAB } set Sortie {} foreach FpPPP [lsort $LesFpPPP] { set PAB [set PABdeFpPPP($FpPPP)] set GDBName [file tail [GenomeDu $PAB]] lappend Sortie "$FpPPP $PAB $GDBName" } EspionneL $Sortie return $Sortie } proc CreeBilanIndividuel { {Fichier ""} } { global RepertoireDuGenome set RepXHda "$RepertoireDuGenome/xhda" if {$Fichier==""} { set BilanTotal "$RepXHda/BilanXHdaTotal" if {! [File exists $BilanTotal]} {return "$BilanTotal does not exists"} } foreach ligne [LesLignesDuFichier $BilanTotal] { Espionne $ligne scan $ligne "%s" NomDeFamille AppendAuFichier "$RepertoireDuGenome/bilan_xhda/$NomDeFamille" $ligne } } proc ReunitLesBilansXHDA { {Nom ""} } { Wup "Reunit les fichiers de bilans en un seul par defaut BilanXHdaTotal" global RepertoireDuGenome set RepXHda "$RepertoireDuGenome/xhda" set BilanLaTotale {} set RepBilan "$RepertoireDuGenome/bilan_xhda" if { $Nom!="" } { set FichierBilanLaTotale "$RepXHda/$Nom" } else { set FichierBilanLaTotale "$RepXHda/BilanXHdaTotal" } set LesFichiersBilan [glob -nocomplain "$RepBilan/*"] #EspionneL $LesFichiersBilan foreach file $LesFichiersBilan { foreach ligne [LesLignesDuFichier $file] { lappend BilanLaTotale $ligne } } set BilanLaTotale [lsort -unique $BilanLaTotale] return [SauveLesLignes $BilanLaTotale dans $FichierBilanLaTotale] } proc PourNucaPourTous {} { Wup "Permet de convertir tous les bilansXHDA en 1 fichier utilisable pour Nuca" global RepertoireDuGenome set RepBilan "$RepertoireDuGenome/bilan_xhda" set LesFamilles [glob -nocomplain "$RepBilan/*"] return "[PourNuca $LesFamilles "" "TousLesBilans"] created." } proc PourNuca { LesFamilles {LesOrgas ""} {FichierXHDA ""} } { Wup "Permet de convertir un fichier BilanXHda en fichier pour Nuca fournit B T ou J" global RepertoireDuGenome set RepXHda "$RepertoireDuGenome/xhda" set RepBilan "$RepertoireDuGenome/bilan_xhda" set LesFichiersFamille {} if {! [regexp "/" $LesFamilles]} { foreach file $LesFamilles { lappend LesFichiersFamille "$RepBilan/$file" } } else { set LesFichiersFamille $LesFamilles } Espionne $LesFichiersFamille if {$LesOrgas=="" || $LesOrgas=="Tous"} { foreach orga [LesGenomesCompletsAuFormat Court] { lappend LesORGAs [string toupper $orga] } } Espionne $LesORGAs if {$FichierXHDA==""} {set FichierXHDA "$RepXHda/TousLesBilans"} if { ! [regexp "/" $FichierXHDA]} { set FichierXHDA "$RepXHda/$FichierXHDA" } set FichierNUCA "${FichierXHDA}_PourNuca" foreach File $LesFichiersFamille { foreach ligne [LesLignesDuFichier $File] { scan $ligne "%s %s %d %d %d" PAB Orga T B J if {! [regexp -all -nocase "$Orga" $LesORGAs]} { continue } set BDePABOrga($PAB,$Orga) $B # set TDePABOrga($PAB,$Orga) $T # set JDePABOrga($PAB,$Orga) $J if { ! [info exists DejaVu($PAB)]} { lappend LesPABs $PAB set DejaVu($PAB) 1 } if { ! [info exists DejaVu($Orga)]} { lappend LesOrgas $Orga set DejaVu($Orga) 1 } } } set n [llength $LesPABs] set d [llength $LesOrgas] set LesLignes [list "$n\t$d"] set FichierOrgasOrdonnes "$RepXHda/OrgaOrdonne.nuca" set Res [SauveLesLignes $LesOrgas dans $FichierOrgasOrdonnes] foreach PAB $LesPABs { set Ligne "$PAB" foreach Orga $LesOrgas { append Ligne "\t[set BDePABOrga($PAB,$Orga)]" # append Ligne "\t[set TDePABOrga($PAB,$Orga)]" # append Ligne "\t[set JDePABOrga($PAB,$Orga)]" } lappend LesLignes $Ligne } return [SauveLesLignes $LesLignes dans $FichierNUCA] } proc RenommeBilan {} { Wup "Renomme les fichier Bilan* en .bilan" global RepertoireDuGenome set RepXHda "$RepertoireDuGenome/xhda" set LesFichiersBilan {} set LesBilans {} set LesFichiersBilan [glob -nocomplain "$RepXHda/bilan*"] foreach file $LesFichiersBilan { lappend LesBilans [file tail $file] } EspionneL $LesBilans foreach file $LesBilans { set Nom $file regsub "^bilan_" $Nom "" Nom set Nom "$Nom.bilan" #Espionne $Nom set Resu [file rename -force "$RepXHda/$file" "$RepXHda/$Nom"] } } proc RelitFichierNuca {FichierNuca} { Wup "Relit une sortie Nuca et permet de la relire en fichier .traiter" global RepertoireDuGenome set RepXHda "$RepertoireDuGenome/xhda" if { ! [regexp "/" $FichierNuca]} { set FichierNuca "$RepXHda/$FichierNuca" } if { ! [file exists $FichierNuca]} { FaireLire "$FichierNuca doesn't exist. I cancel RelitFichierNuca" return "" } set NewFile {} foreach ligne [LesLignesDuFichier $FichierNuca] { if { [regexp "Number of clusters" $ligne] } { lappend NewFile $ligne continue } if { [regexp "^Cluster" $ligne] } { lappend NewFile $ligne continue } if {$ligne==""} { lappend NewFile "\n" continue } scan $ligne "%s" PAB lappend NewFile $PAB } set FichierNewFile "$FichierNuca.traiter" return "[SauveLesLignes $NewFile dans $FichierNewFile] created." } proc LesLoupesDeTous { {Fichier ""} } { Wup "Rend les Loupes ou jaunes de tous les organismes et PABs classes par PAB ou par Orga dans LoupeDeTous.parpab et LoupeDeTous.parorga" global RepertoireDuGenome set RepXHda "$RepertoireDuGenome/xhda" set RepBilan "$RepertoireDuGenome/bilan_xhda" if { $Fichier!="" && ! [regexp "/" $Fichier]} { set FichierBilan "$RepBilan/$Fichier" } if { $Fichier=="" } { set FichierBilan "" } set LesOrgas [LesLoupes "LesOrganismesMerci" "Tous" $FichierBilan] set LesPABs [LesLoupes "LesPABsMerci" "Tous" $FichierBilan] set Resultat {} foreach element $LesOrgas { lappend Resultat "[lrange $element 0 end] [LesLoupes $element "Tous" $FichierBilan]" } set Ok [SauveLesLignes $Resultat dans "$RepXHda/LoupeDeTous.parorga"] set Resultat {} foreach element $LesPABs { lappend Resultat "$element [join [LesLoupes $element "Tous" $FichierBilan] " "]" } set Ok [SauveLesLignes $Resultat dans "$RepXHda/LoupeDeTous.parpab"] return "" } proc LesLoupesDiaBac { {Fichier ""} } { Wup "Rend les Loupes ou jaunes uniquement des DiaBacs classes par PAB ou par Orga dans LoupeDiaBac.parpab et LoupeDiaBac.parorga" global RepertoireDuGenome set RepXHda "$RepertoireDuGenome/xhda" set RepBilan "$RepertoireDuGenome/bilan_xhda" if { $Fichier!="" && ! [regexp "/" $Fichier]} { set FichierBilan "$RepBilan/$Fichier" } if { $Fichier=="" } { set FichierBilan "" } set LesOrgas [LesLoupes "LesOrganismesMerci" "SampledOnly" $FichierBilan] set LesPABs [LesLoupes "LesPABsMerci" "SampledOnly" $FichierBilan] set Resultat {} foreach element $LesOrgas { lappend Resultat "[lrange $element 0 end] [LesLoupes $element "SampledOnly" $FichierBilan]" } set Ok [SauveLesLignes $Resultat dans "$RepXHda/LoupeDiaBac.parorga"] set Resultat {} foreach element $LesPABs { lappend Resultat "$element [join [LesLoupes $element "SampledOnly" $FichierBilan] " "]" } set Ok [SauveLesLignes $Resultat dans "$RepXHda/LoupeDiaBac.parpab"] return "" } proc LesLoupes { {OrgaOuPAB ""} {SampledOnly ""} {FichierBilan ""} } { Wup "Determine dans un fichier bilanXHDA les loupes,rend des orgas pour un PAB, et vice versa" Wup "Ceci pour les Sampled uniquement ou Tous leurs PABs (si orga) leurs orgas (si PAB)" Wup "Rend aussi laListecomplete des Orgas ou PABs loupes" global RepertoireDuGenome global LesLoupes if {[info exists LesLoupes($OrgaOuPAB)]} { return [set LesLoupes($OrgaOuPAB)] } if {[info exists LesLoupes]} { return ""} if {$SampledOnly=="Tous"} {set SampledOnly 0} else {set SampledOnly 1} set RepXHda "$RepertoireDuGenome/xhda" set RepBilan "$RepertoireDuGenome/bilan_xhda" if {$FichierBilan==""} { set LesFichiersBilan [glob -nocomplain "$RepBilan/*"] } if { $FichierBilan!="" && ! [regexp "/" $FichierBilan]} { set LesFichiersBilan "$RepBilan/$FichierBilan" } #EspionneL $LesFichiersBilan set LesPABsLoupes {} foreach file $LesFichiersBilan { if { ! [file exists $file]} { continue } foreach ligne [LesLignesDuFichier $file] { scan $ligne "%s %s %d %d %d" PAB Orga T B J if { $ligne == "" } { continue } if {[CouleurHDACroises [list $T $B $J]]=="J"} { set Organisme [Glossaire $Orga Complet] if {$SampledOnly && ! [SampledOrganism $Organisme]} { continue } lappend LesLoupes($PAB) $Organisme lappend LesLoupes($Organisme) $PAB if { ! [info exists DejaVu($PAB)]} { lappend LesPABsLoupes $PAB set DejaVu($PAB) 1 } if { ! [info exists DejaVu($Organisme)]} { lappend LesOrganismesLoupes $Organisme set DejaVu($Organisme) 1 } } } } if {! [info exists LesOrganismesLoupes]} { set LesLoupes(LesOrganismesMerci) "Aucun" } else { set LesLoupes(LesOrganismesMerci) $LesOrganismesLoupes } if {! [info exists LesOrganismesLoupes]} { set LesLoupes(LesPABsMerci) "Aucun" } else { set LesLoupes(LesPABsMerci) $LesPABsLoupes } return [LesLoupes $OrgaOuPAB] } proc LitLoupesParPAB {Fichier Qui} { set LesVraisOrgas {} foreach Ligne [LesLignesDuFichier $Fichier] { if {! [regexp -nocase {[a-z]+} $Ligne]} {continue} scan $Ligne "%s" PAB if {$PAB!=$Qui} {continue} set LesOrgas [StringSuivant "$PAB" dans $Ligne] foreach {Genre Espece} $LesOrgas { lappend LesVraisOrgas "$Genre $Espece" } } return [lsort $LesVraisOrgas] } proc LitLoupesParORGA {Fichier Qui} { set LesPABs {} set ORGA [Glossaire $Qui Complet] foreach Ligne [LesLignesDuFichier $Fichier] { if {! [regexp -nocase {[a-z]+} $Ligne]} {continue} scan $Ligne "%s %s" Genre Espece set Organisme "$Genre $Espece" if {$Organisme!=$Qui && $Organisme!=$ORGA} {continue} set LesPABs [StringSuivant "$Espece" dans $Ligne] } return [lsort $LesPABs] } proc LesLoupesDe {Quoi} { global RepertoireDuGenome set RepXHda "$RepertoireDuGenome/xhda" if {[EstUnPAB $Quoi]} { set Fichier "$RepXHda/LoupeDeTous.parpab" if {[File exists $Fichier]} { return [LitLoupesParPAB $Fichier $Quoi] } else { return "$Fichier do not exists" } } else { set Fichier "$RepXHda/LoupeDeTous.parorga" if {[File exists $Fichier]} { return [LitLoupesParORGA $Fichier $Quoi] } else { return "$Fichier do not exists" } } } proc LesMembresDeLaFamille Nom { global RepertoireDuGenome set RepFamille "$RepertoireDuGenome/xhda/famille" if {[file exists "$RepFamille/${Nom}.fam"] && [file size "$RepFamille/${Nom}.fam"]!=0} { set FichierFamille "$RepFamille/${Nom}.fam" } else { return "" } foreach ligne [LesLignesDuFichier $FichierFamille] { scan $ligne "%s %s %s" FPP PAB orga set Famille [lindex [split $FPP "_"] 0] lappend LesORGAsPABs $orga lappend LesORGAsPABs $PAB } return $LesORGAsPABs } proc CreonsLesLoupesRR {} { global RepertoireDuGenome set RepXHDA "$RepertoireDuGenome/xhda" set FichierDesLoupes "$RepXHDA/Loupe.parpab" set LesFamilles {} if {![file exists $FichierDesLoupes]} { return "Loupe.parpab does not exists" } foreach ligne [LesLignesDuFichier $FichierDesLoupes] { set OrgaLoupes {} scan $ligne "%s" Famille regsub "$Famille " $ligne "" ligne set n [llength $ligne] for {set i 0} {$i<$n} {incr i 2} { set Genre [lindex $ligne $i] set Espece [lindex $ligne [expr $i+1]] lappend OrgaLoupes "$Genre $Espece" } if { ! [info exists DejaVu($Famille)]} { lappend LesFamilles $Famille set DejaVu($Famille) 1 } set OrgaLoupeDeLaFamille($Famille) $OrgaLoupes #Espionne "OrgaLoupe $OrgaLoupes" } #Espionne "LesFamilles $LesFamilles" foreach Fam $LesFamilles { #Espionne "Fam $Fam" set LesGenOrfs [LesMembresDeLaFamille $Fam] #Espionne "LesGenOrfs $LesGenOrfs" #Espionne "Tab [set OrgaLoupeDeLaFamille($Fam)]" foreach OrgaJaune [set OrgaLoupeDeLaFamille($Fam)] { set OrgaJaune [string toupper [Glossaire $OrgaJaune Court]] #Espionne "OrgaJaune $OrgaJaune" #Espionne "Slut CreonsLeJaune $Fam $OrgaJaune $LesGenOrfs" CreonsLeJaune $Fam $OrgaJaune $LesGenOrfs } } } proc ProtocoleXHDA {} { Espionne "Creation des familles:\n\tCreeLesFamillesDesSelectionnes LaTotale NoAsk\n" Espionne "Creation des bilans X-HDA:\n\tNewHDACroisesPourTous\n" Espionne "Creation du fichier pour Dpc:\n\tPourNucaPourTous\n" Espionne "Pour lancer Dpc:\n\t/biolo/secator/dpc TousLesBilans_PourNuca write_coordinates\n" Espionne "Pour repertorier les proteines ratees chez Tous:\n\tLesLoupesDeTous\nGenere 2 fichiers .parpab .parorga\n" Espionne "Pour repertorier les proteines ratees seulement chez DiaBac:\n\tLesLoupesDiaBac\nGenere 2 fichiers .parpab .parorga\n" Espionne "On peut ensuite relire les rates par PAB ou par Orga:\n\tLesLoupesDe\n" Espionne "Pour visualiser les profils de Dpc:\n\tDpcShow TousLesBilans_PourNuca.dpc OrgaOrdonnes.nuca\n" Espionne "Le Fichier demande pour avoir les orga en X sur les profils:\n\txhda\OrgaOrdonnes.nuca\n" Espionne "Pour les infos d'un cluster:\n\t InfoSurLeCluster NumeroOuPAB" } proc LeBilanTriePourJean { {Fichier ""} } { global RepertoireDuGenome set RepBilan "$RepertoireDuGenome/bilan_xhda" if {! [regexp "/" $Fichier]} { set Fichier "$RepBilan/$Fichier" } set Fichier [LectureBilanHDACroises LesFamilles LesOrgCibles Bilan $Fichier] if {$Fichier=={}} { return "" } set LesXs $LesFamilles set LesYs $LesOrgCibles set Ordre "SampledBAE" set LesGenoTries [LesGenomesDansLeBonOrdre $Ordre] foreach Y $LesYs { set JExiste($Y) 1 } foreach G $LesGenoTries { set Y [string toupper [Glossaire $G Court]] if { ! [info exists JExiste($Y)]} { continue } lappend LesYsTries $Y } set Titre "X-HDA sorted by Organisms ($Ordre)" set Fichier [File tail $Fichier] return [DessineBilanHDACroises $LesXs $LesYsTries Bilan $Fichier] }