proc DonneesAful AF { Wup "We used Archeoglobus fulgidus as model for classification" global LesDonneesAful if {$AF == ""} { return {} } if { ! [info exists LesDonneesAful]} { ChargeLesDonneesAful } if { ! [info exists LesDonneesAful($AF)]} { return {}} return [set LesDonneesAful($AF)] } proc ChargeLesDonneesAful {} { global RepertoireDuGenome global LesDonneesAful JeMeSignale Patience foreach Ligne [LesLignesDuFichier "$RepertoireDuGenome/aful/aful_la_totale.txt"] { if {[regexp "^AF" $Ligne]} { scan $Ligne "%s" AF lappend LesDonneesAful($AF) $Ligne } } JeMeSignale FinPatience } proc GNdeAful Nom { if {[scan [lindex [DonneesAful [NomDuMeilleurAful $Nom]] 0] "%s %s %s %s" AF RoFa Orga GN] == 4 } { return $GN } else { return "zzzz" } } proc NomDuMeilleurAful Nom { set mAF [MeilleurAful $Nom] scan [MeilleurAful $Nom] "%s %s %f %s" AF AFok PN Raison if {$AFok} { return $AF } else { return "" } } proc MeilleurAful Nom { global LeMeilleurAful if { ! [info exists LeMeilleurAful]} { ChargeLeMeilleurAful } if { ! [info exists LeMeilleurAful($Nom)]} { return "AF0000 0 8888.8 noReference"} return [set LeMeilleurAful($Nom)] } proc ChargeLeMeilleurAful {} { global RepertoireDuGenome global ListeDeBoites global LeMeilleurAful JeMeSignale Patience if { ! [info exists ListeDeBoites]} { ChargeListeDeBoites } foreach Boite $ListeDeBoites { set Nom [Box $Boite nom] if { ! [YaPABdans $Nom]} { continue } set FichierAPNs "$RepertoireDuGenome/afulapns/$Nom" if { ! [file exists $FichierAPNs]} { set LeMeilleurAful($Nom) "AF0000 0 9999.9 noBlastpFile" continue } scan [lindex [LesLignesDuFichier $FichierAPNs] 0] "%s %f" AF PN set SeuilDuMeileurAful 99.9 # set SeuilDuMeileurAful 1.e-3 set AFok [expr $PN <= $SeuilDuMeileurAful] set LeMeilleurAful($Nom) "$AF $AFok $PN compared_to_$SeuilDuMeileurAful" } JeMeSignale FinPatience } proc QueDitAful Nom { global RepertoireDuGenome global KanvaCourant scan [MeilleurAful $Nom] "%s %s %f %s" AF AFok PN Raison if {$AFok} { set ListeDesDonnees [DonneesAful $AF] if { $ListeDesDonnees == {} } { set Message "$AF $PN" return 0 } else { set Message "$AF $PN\n[join $ListeDesDonnees "\n"]" } } else { set Message "$AF $PN $Raison" return 0 } # if {[FiabiliteFonction $Nom] < 7} { return 0 } set Fenetre [AfficheVariable "$Message\n\n[ContenuDuFichier $RepertoireDuGenome/infos/$Nom]" "GrandeLargeur"] set DEs [ExtraitInfo $Nom "DE"] set LesDEs [split $DEs "/"] set GNs [ExtraitInfo $Nom "GN"] set LesGNs [split $GNs "/"] scan [lindex $ListeDesDonnees 0] "%s %s %s %s" AF RoleFamille HomologueDuAful GNduAful set ListeDesMots [split [lindex $ListeDesDonnees 0] " "] set DEduAful [join [lrange $ListeDesMots 4 end] " "] set ListeDesMots [split [lindex $ListeDesDonnees 1] "/"] set StringRoleFamille [join [lrange $ListeDesMots 1 2] "/"] if {[info exists KanvaCourant]} { RepereBox "Nom: $Nom" $KanvaCourant "SansInforme" } set ValiDE "$DEduAful" set ValiGN "$GNduAful" set ValiCF "$RoleFamille / $StringRoleFamille" set Action [ChoixParmi [list "Aful CF DE GN" "Aful CF DE " "Aful CF GN" "Aful CF " "Autres choix ..." "Abandonne ce [PreFixe]" ]] switch $Action { "Aful CF DE GN" { Informe $Nom "ValiDE: $ValiDE\nValiGN: $ValiGN\nValiCF: $ValiCF" catch { $Fenetre.buttons.dismiss invoke } return 1 } "Aful CF GN" { Informe $Nom "ValiGN: $ValiGN\nValiCF: $ValiCF" catch { $Fenetre.buttons.dismiss invoke } return 1 } "Aful CF DE " { Informe $Nom "ValiDE: $ValiDE\nValiCF: $ValiCF" catch { $Fenetre.buttons.dismiss invoke } return 1 } "Aful CF " { Informe $Nom "ValiCF: $ValiCF" catch { $Fenetre.buttons.dismiss invoke } return 1 } "Abandonne ce [PreFixe]" { catch { $Fenetre.buttons.dismiss invoke } return 1 } "Autres choix ..." { set YaCF 0 set ValiDE [ChoixParmi [concat $LesDEs [list "$DEduAful"] "EditInfo"]] if {$ValiDE != ""} { if {$ValiDE == "EditInfo"} { Informe $Nom } else { if {$ValiDE == $DEduAful} { Informe $Nom "ValiDE: $ValiDE\nValiCF: $ValiCF" set YaCF 1 } else { Informe $Nom "ValiDE: $ValiDE" } } } set ValiGN [ChoixParmi [concat $LesGNs $GNduAful "EditInfo"]] if {$ValiGN != ""} { if {$ValiGN == "EditInfo"} { Informe $Nom } else { if {$ValiGN == $GNduAful} { Informe $Nom "ValiGN: $ValiGN\nValiCF: $ValiCF" set YaCF 1 } else { Informe $Nom "ValiGN: $ValiGN" } } } if { ! $YaCF } { Informe $Nom "ValiCF: $ValiCF" } catch { $Fenetre.buttons.dismiss invoke } return 1 } } $Fenetre.buttons.dismiss invoke return 0 }