Index by: file name | procedure name | procedure call | annotation
gscope_hda.tcl (annotations | original source)

# 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 <Shift-1>   "TriBilanHDACroises $K 1 SurOrganisme" 
    bind $B <Shift-2>   "TriBilanHDACroises $K 2 SurOrganisme" 
    bind $B <Shift-3>   "TriBilanHDACroises $K 3 SurOrganisme" 
    bind $B <Control-1> "TriBilanHDACroises $K 1 SurLaMoyenne" 
    bind $B <Control-2> "TriBilanHDACroises $K 2 SurLaMoyenne" 
    bind $B <Control-3> "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 <Shift-1>   "ShowHDACroises {}"
    bind $B <Shift-2>   "ShowHDACroises AskForFile"
    bind $B <Shift-3>   "NewHDACroises" 
    bind $B <Control-1> "DisplayBilanHDACroises $K 1" 
    bind $B <Control-2> "DisplayBilanHDACroises $K 2" 
    bind $B <Control-3> "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"    <Shift-1>   "TriBilanHDACroises $K 1 SurFamille" 
    $K bind "Famille"    <Shift-2>   "TriBilanHDACroises $K 2 SurFamille" 
    $K bind "Famille"    <Shift-3>   "TriBilanHDACroises $K 3 SurFamille"

    $K bind "TexteOrga"  <Shift-1>   "TriBilanHDACroises $K 1 SurLaMoyenne" 
    $K bind "TexteOrga"  <Shift-2>   "TriBilanHDACroises $K 2 SurLaMoyenne" 
    $K bind "TexteOrga"  <Shift-3>   "TriBilanHDACroises $K 3 SurLaMoyenne" 
    $K bind "Affichable" <Enter>     "DevoileLesValeursHDACroises $K %x %y Enter"
    $K bind "Affichable" <Leave>     "DevoileLesValeursHDACroises $K %x %y Leave"
    $K bind "Affichable" <1>         ""
    $K bind "Affichable" <Control-2> "ChangeOrdrePhylo $K %x %y $HL -1 $iEmeOrga"
    $K bind "Affichable" <Control-3> "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 <Shift-1> "CreeEtAfficheUnBilanHDACroises \[set PagePropre($Fen)\]"
    bind $B <Shift-2> "CreeEtAfficheUnBilanHDACroises \[set PagePropre($Fen)\] AvecTri"
    bind $B <Control-1> "AfficheLesInfosDuCluster"
    bind $B <Control-3> "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 <Shift-1> "CreeEtAfficheUnBilanHDACroises \[set PagePropre($Fen)\]"
    bind $B <Shift-2> "CreeEtAfficheUnBilanHDACroises \[set PagePropre($Fen)\] AvecTri"
    bind $B <Control-1> "AfficheLesInfosDuCluster"
    bind $B <Control-2> "OntologyDesClusters \[set PagePropre($Fen)\]"
    bind $B <Control-3> "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]
}


Index by: file name | procedure name | procedure call | annotation
File generated 2022-04-05 at 12:55.