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

proc ProtocoleDuProttfaAuMacsim {{Nom ""}} {

    Espionne "BlastPPourTous"
    BlastPPourTous                                     $Nom

    Espionne "DaedaluhitsDuBlastPPourTous"
    DaedalusHitsDuBlastPPourTous                       $Nom "EnProcessExterne"

    if {$Nom==""} {
	CreeLeFichierNombreDeCopainsDansBlast
    }

    Espionne "DbClustalPourTous"
    DbClustalPourTous                                  $Nom "daedalus"

    if {$Nom==""} {
	Espionne "CreeLesFichiersPhylos"
	CreeLesFichiersPhylos                          $Nom
    }

    Espionne "LeonEtMacsimPourTous"
    LeonEtMacsimPourTous                               $Nom

}

proc ProtocolePeroxisome {{Nom ""}} {
    if {$Nom==""} {
	set Bornes [UneNouvelleSequencePourGscope]
	if {$Bornes!=""} { scan $Bornes "%s" Nom }
    }
    Espionne "PsiBlastPPourTous"
    PsiBlastPPourTous                                  $Nom
    Espionne "DernierBlastDuPsiBlastPourTous"
    DernierBlastDuPsiBlastPourTous                     $Nom
    Espionne "DbClustalPourTous"
    DbClustalPourTous                                  $Nom
    Espionne "CreeLesFichiersPhylos"
    CreeLesFichiersPhylos                              $Nom
    Espionne "RemplaceAccessParOrganismeDansFichierPhylo"
    RemplaceAccessParOrganismeDansFichierPhyloPourTous $Nom
    Espionne "LeonEtMacsimPourTous"
    LeonEtMacsimPourTous                               $Nom
}

proc AfficheSortedDistances {NomOuFichier} {
    set LesDistances [PairwizeDistancesInMsf "SortedDistances" $NomOuFichier]
    return [Graphe $LesDistances]
}

proc AfficheReduceMsf {NomOuFichier {MinAB ""}} {
    set MSF [ReduceMsf $NomOuFichier "GetText" $MinAB]
    return [AfficheVariable $MSF "AvecEtudeMSFGrandeLargeur" $NomOuFichier]
}

proc ReduceMsf {NomOuFichier {FicOut ""} {MinAB ""}} {

    if {$FicOut==""} { set FicOut "GetText" }

    if {$MinAB==""} { set MinAB 0.2 }

    set Nom [file tail $NomOuFichier]
    if {[EstUnPAB $NomOuFichier]} {
	set Fichier "[RepertoireDuGenome]/msf/$Nom"
    } else {
	set Fichier $NomOuFichier
    }
    set TexteMsf [ContenuDuFichier $Fichier]
    if {[regexp "QUERY_PROTEIN" $TexteMsf]} {
	set Nom "QUERY_PROTEIN"
    }

    set LesAccess [PairwizeDistancesInMsf "AccessList" $Fichier] 
    set LesRejetes {}
    foreach A $LesAccess {
	set  Adist [PairwizeDistancesInMsf $Nom $A]
	if {$Adist==""} { continue }
	foreach B $LesAccess {
	    set  Bdist [PairwizeDistancesInMsf $Nom $B]
	    if {$Bdist==""} { continue }
	    if {$A>$B} { set PremAlpha $A } else { set PremAlpha $B } 
	    if {$Adist  > $Bdist} { set PlusLoin($A,$B) [set PlusLoin($B,$A) $A] }
	    if {$Bdist  > $Adist} { set PlusLoin($A,$B) [set PlusLoin($B,$A) $B] }
	    if {$Adist == $Bdist} { set PlusLoin($A,$B) [set PlusLoin($B,$A) $PremAlpha] }
	}
    }
    set I 0
    foreach A $LesAccess {
	incr I
	if {$A==$Nom} {continue}
	set Adist [PairwizeDistancesInMsf $Nom $A]
	if {$Adist==""} { continue }
	foreach B [lrange $LesAccess $I end] {
	    if {$B==$Nom} {continue}
	    set ABdist [PairwizeDistancesInMsf $A $B]
	    if {$ABdist==""} { continue }
	    if {$ABdist>$MinAB} { continue }
	    set Bdist [PairwizeDistancesInMsf $Nom $B]
	    if {$Bdist==""} { continue }
	    if {$PlusLoin($A,$B)==$A} { lappend LesRejetes $A } 
	    if {$PlusLoin($A,$B)==$B} { lappend LesRejetes $B }
	}
    }
    set LesRejetes [lsort -unique $LesRejetes]
    set NewMSF [MSFSelection $TexteMsf $LesRejetes "Out"]
    if {$FicOut=="GetText"} { return $NewMSF }
    return [Sauve $NewMSF dans $FicOut]
}

proc PairwizeDistancesInMsf {A {B ""} {Fichier ""}} {
    global PairwizeDistancesInMsf

    if {$A=="AccessList"} {
	set Fichier $B
	set B ""
    }

    if {$A=="SortedDistances"} {
	set Fichier $B
	set B ""
    }

    if {$Fichier=="" || \
	    [info exists PairwizeDistancesInMsf] && $PairwizeDistancesInMsf(Fichier)==$Fichier} {
	if {[info exists PairwizeDistancesInMsf($A,$B)]} { return $PairwizeDistancesInMsf($A,$B) }
	return ""
    }

    set PairwizeDistancesInMsf(Fichier) $Fichier
    set FicTmp [TmpFile "" "" "_"]
    file copy $Fichier $FicTmp
    if {[catch {exec clustalw -tree -outputtree=dist -infile=$FicTmp} Message]} {
	Warne "Error during PairwizeDistancesInMsf $Fichier\n \
		clustalw -tree -outputtree=dist -infile=$FicTmp\n \
		I got the message \n$Message"
	return ""
    }
    if { ! [file exists $FicTmp.dst]} {
	Warne "Error during PairwizeDistancesInMsf $Fichier\\n \
		clustalw -tree -outputtree=dist -infile=$FicTmp\n \
		The output file $FicTmp.dst doesn't exist"
	return ""
    }
    set L 0

    foreach Ligne [lrange [LesLignesDuFichier $FicTmp.dst] 1 end] {
	if { ! [regexp "^( |\t)" $Ligne]} {
	    scan $Ligne "%s" Access
	    set Ligne [StringSuivant " " dans $Ligne]
	    incr L
	    set TabAccess($L) $Access
	    lappend LesAccess $Access
	    lappend LesLs $L
	    set C 0
	}
	foreach Mot [LesMotsDeLaLigne $Ligne] {
	    incr C
	    set TabDist($L,$C) $Mot
	    lappend LesDistances $Mot
	}
    }
    if {[file exists $FicTmp]}     {file delete $FicTmp}
    if {[file exists $FicTmp.dst]} {file delete $FicTmp.dst}
    foreach L $LesLs {
	foreach C $LesLs {
	    set PairwizeDistancesInMsf($TabAccess($L),$TabAccess($C)) $TabDist($L,$C)
	}
    }
    set PairwizeDistancesInMsf(SortedDistances,) [lsort -real -unique $LesDistances]
    set PairwizeDistancesInMsf(AccessList,) $LesAccess
    return [PairwizeDistancesInMsf $A $B]
}

proc LoinToujoursTest {} {
    puts [LoinToujours 0.1]
    puts [LoinToujours 0.0001]
    puts [LoinToujours 0.01 Set]
    puts [LoinToujours 0.1]
    puts [LoinToujours 0.00001]
    puts [LoinToujours Reset]
    puts [LoinToujours 0.1]
    puts [LoinToujours NotUsed]
    puts [LoinToujours 0.0001]
    puts [LoinToujours 0.01 Set]
    puts [LoinToujours 0.1]
    puts [LoinToujours 0.00001]
    puts [LoinToujours Reset]
    puts [LoinToujours 0.1]
    puts [LoinToujours 0.00001]
}

proc LoinToujours {PN {Action ""}} {
    Wup "On peut vouloir prendre toutes les sequences lointaines"
    Wup "LoinToujours 0.001 Set       en fixe le seuil"
    Wup "LoinToujours bidon NotUsed   on repondra systematique non"
    Wup "LoinToujours bidon Reset           on annule tout pour le prochain usage"
    Wup "LoinTours PN                 repond PN>SeuilExpect"

    if {[OnTraiteMS2PH]} { return 0 }
    global LoinToujours

    if {$PN=="Reset" || $PN=="NotUsed"} { set Action $PN } 

    if {$Action=="Reset"} {
	if {[info exists LoinToujours]} { unset LoinToujours }
	return 0
    }
    if {$Action=="NotUsed"} {
	set LoinToujours(UseIt) 0
	return 0
    }
    if {$Action=="Set"} {
	if {[info exists LoinToujours]} { unset LoinToujours }
	set LoinToujours(UseIt) 1
	set LoinToujours(SeuilExpect) $PN
	return 1
    }
    if { ! [info exists LoinToujours(SeuilExpect)]} { set LoinToujours(SeuilExpect) 0.001 }

    if { ! [info exists LoinToujours(UseIt)]} {
	set LoinToujours(UseIt) [OuiOuNon "Do I take all sequences, even with expect > $LoinToujours(SeuilExpect)" 0]
    }
    if {$LoinToujours(UseIt)} { return [expr $PN>$LoinToujours(SeuilExpect)] }
    return 0
}

proc MounirDuBlast {NomOuFichier {FichierSortie ""} {SeuilExpect ""} {MaxListe ""}} {

    if {$SeuilExpect==""} { set SeuilExpect 0.001 }
    if {$MaxListe==""}    { set MaxListe 9999 }

    if {$FichierSortie==""} { set FichierSortie "GetText" }

    set Nom [file tail $NomOuFichier]
    if {[EstUnPAB $NomOuFichier]} {
	set Fichier "[RepertoireDuGenome]/blastp/$Nom"
    } else {
	set Fichier $NomOuFichier
    }
    DecortiqueBlast $Fichier $SeuilExpect $MaxListe Query lBanqueId lAccess lDE lProfil lPN
    foreach BanqueId $lBanqueId PN $lPN {
	if {$PN>$SeuilExpect} { break }
	set PNde($BanqueId) $PN
    }
    set SortieMounir [exec MounirDuBlastP < $Fichier]
    set LesElus {}
    set n 0
    foreach Ligne [split $SortieMounir "\n"] {
	if {[incr n] > $MaxListe} { break }
	scan $Ligne "%s" BanqueId
	if { ! [info exists PNde($BanqueId)]} { break }
	set PN $PNde($BanqueId)
	if {$PN>$SeuilExpect} { break }
	lappend LesElus $BanqueId
    }
    if {$FichierSortie=="GetList"} { return $LesElus }

    set LeReduit [BlastReduit $Fichier $LesElus]
    set Reduit [join $LeReduit "\n"]
    if {$FichierSortie=="GetText"} { return $Reduit }
    if {$FichierSortie=="Show"} {
	return [AfficheVariable $Reduit "AvecSegAlignement" "MounirReducedOf_/$Nom"]
    }
    return [Sauve $Reduit dans $FichierSortie]
}

proc MsfDesTFAsPourSapPourTous {} {
    set RepMsfPourSap "[RepertoireDuGenome]/msfpoursap"
    if { ! [file exists $RepMsfPourSap]} { file mkdir $RepMsfPourSap }
    set RepTFAsPourSap "[RepertoireDuGenome]/tfaspoursap"
    foreach Nom [ListeDesPABs] {
	set InFile "$RepTFAsPourSap/$Nom"
	if { ! [file exists $InFile]} { continue }
	set OutFile "$RepMsfPourSap/$Nom"
	ConvertToMsf $InFile $OutFile
	Espionne [exec ls -l $OutFile]
    }
}

proc MsfDesMAFFTPourTous {} {
    set RepMsfMafft "[RepertoireDuGenome]/msfmafft"
    if { ! [file exists $RepMsfMafft]} { file mkdir $RepMsfMafft }
    set RepMafft "[RepertoireDuGenome]/mafft"
    foreach Nom [ListeDesPABs] {
	set InFile "$RepMafft/$Nom"
	if { ! [file exists $InFile]} { continue }
	set OutFile "$RepMsfMafft/$Nom"
	ConvertToMsf $InFile $OutFile
	Espionne [exec ls -l $OutFile]
    }
}

proc SelectPdbForRefXPourTous {} {
    set RepSap "[RepertoireDuGenome]/tfaspoursap"
    if { ! [file exists $RepSap]} { file mkdir $RepSap }
    set RepMafft "[RepertoireDuGenome]/mafft"
    foreach Nom [ListeDesPABs] {
	set InFile "$RepMafft/$Nom"
	if { ! [file exists $InFile]} { continue }
	set OutFile "$RepSap/$Nom"
	set Retour [SelectPdbForRefX $InFile $OutFile]
	Espionne "With $Nom I got >$Retour<"
    }
}

proc SelectPdbForRefX {InFile OutFile {Cutoff ""}  {MatBla ""} {LogFile ""}} {

    set BaliBaseDir "/workbench/julie/bb/src"

    if {$LogFile==""} { set LogFile "/dev/null" }
    if {$MatBla ==""} { set MatBla "$BaliBaseDir/id.bla" }
    if {$Cutoff ==""} { set Cutoff 30 }
    exec $BaliBaseDir/selectpdbforref1 $InFile $Cutoff $MatBla $OutFile > $LogFile

    if {[file exists $OutFile]} { return $OutFile }
    return ""
}

proc CreeLeFichierTFAsDesAccessDuBlastPPourTous {{RepTFAs ""} {SeuilExpect ""} {MaxListe ""}} {
    if {$SeuilExpect==""} { set SeuilExpect 0.001 }
    if {$MaxListe==""}    { set MaxListe "SansLimiteDeNombre" }
    if {$RepTFAs==""}     { set RepTFAs "[RepertoireDuGenome]/tfaspourmafft" }

    if { ! [file exists $RepTFAs]} {file mkdir $RepTFAs} 

    foreach Nom [ListeDesPABs] {
	set FichierBlast "[RepertoireDuGenome]/blastp/$Nom"
	set FichierTFAs  "$RepTFAs/$Nom"
	if { ! [file exists $FichierBlast]} { continue }
	if {[file exists $FichierTFAs]} { continue }
	DecortiqueBlast $FichierBlast $SeuilExpect $MaxListe Query lBanqueId lAccess lDE lProfil lPN
	Espionne [CreeUnTFAsDesListesBidAccess $lBanqueId $lAccess $FichierTFAs]
    }
}

proc BlastTrieDuPsiBlastPourTous {} {
    set Rep "[RepertoireDuGenome]/blastptrie"
    if { ! [file exists $Rep]} { file mkdir $Rep }
    foreach Nom [ListeDesPABs] {
	set FicPsiBlast "[RepertoireDuGenome]/psiblastp/$Nom"
	if { ! [file exists $FicPsiBlast]} { continue }
	set FicBlastTrie "$Rep/$Nom"
	set BlastTrie [DernierBlastDuPsiBlast $FicPsiBlast "Trie"]
	if {$BlastTrie==""} { continue }
	Sauve $BlastTrie dans $FicBlastTrie
    }
}

proc PsiBlast {FichierTFA {FichierPsiBlast ""} {Banque ""} {Options ""}} {

    if {$Banque==""} { set Banque "/catalog/blast/protall" }

    if {$FichierPsiBlast==""} {
	regsub {\.[^\.]+$} FichierTFA "" FichierPsiBlast
	append FichierPsiBlast ".psiblast"
    }
    if {$Options==""} { set Options "-j 1 -F T" }
    if {[catch { exec blastpgp -i $FichierTFA -d $Banque $Options -o $FichierPsiBlast.encours } Message]} {
	Espionne $Message
	return ""
    }
    if {[file exists $FichierPsiBlast.encours]} {
	file rename $FichierPsiBlast.encours $FichierPsiBlast
	return $FichierPsiBlast
    }
    return ""
}

proc ShowLesBlastsDuPsiBlast {Fichier {Nieme ""}} {

    if {$Nieme==""} { set Nieme "All" ; set Trie "" } else { set Trie "Trie" }
    set Queue [file tail $Fichier]
    set LesBlasts [LesBlastsDuPsiBlast $Fichier $Nieme $Trie]
    
    if {$Nieme!="All"} {
	set LesBlasts [list $LesBlasts]
	set LesIiemes [list $Nieme]
    } else {
	set LesIiemes [NombresEntre 1 [llength $LesBlasts]]
    }
    foreach Blast $LesBlasts Iieme $LesIiemes {
	set Fen [AfficheVariable $Blast "AvecSegAlignement" "${Iieme}_iteration_of_Psi_Blast/$Queue"]
    }
    return $Fen
}

proc DernierBlastDuPsiBlastPourTous {{Nom ""}} {
    if {$Nom==""} {
	set Liste [ListeDesPABs]
    } else {
	set Liste [list $Nom]
    }
    set RepDernier "[RepertoireDuGenome]/blastpDernierDuPsi"
    file mkdir $RepDernier
    foreach Nom $Liste {
	set FichierDer "$RepDernier/$Nom"
	if {[file exists $FichierDer]} { continue } 

	set FichierPsi "[RepertoireDuGenome]/psiblastp/$Nom"
	if { ! [file exists $FichierPsi]} { continue } 

	set DernierBlast [LesBlastsDuPsiBlast $FichierPsi "end" "Trie"]
	if {$DernierBlast==""} { continue }
	Espionne [Sauve $DernierBlast dans $FichierDer]
    }
}

proc DernierBlastDuPsiBlast {FicPsiBlast {Trie ""}} {
  
    set DernierBlast [LesBlastsDuPsiBlast $FicPsiBlast "end" $Trie]
    return $DernierBlast
}

proc LesBlastsDuPsiBlast {Fichier {Nieme ""} {Trie ""}} {

    if {$Trie==""} { set Trie 0 } else { set Trie 1 }

    if {$Nieme==""} { set Nieme "All" }
    set DansEntete 1
    set DansFin 0
    set LaFin {}
    set LesBlasts {}
    foreach Ligne [LesLignesDuFichier $Fichier] {
	if {$DansFin || [regexp "  Database" $Ligne]} {
	    set DansFin 1
	    set DansEntete 0
	    lappend LaFin $Ligne
	    continue
	} 
	if {[regexp "Results from round" $Ligne]} {
	    set DansEntete 0
	    if {[info exists LeCourant]} {
		lappend LesBlasts $LeCourant
	    }
	    set LeCourant $LEntete
	    continue
	}
	if {$DansEntete} {
	    lappend LEntete $Ligne
	    continue
	}
	lappend LeCourant $Ligne
    }
    if {[info exists LeCourant]} {
	lappend LesBlasts $LeCourant
    }
    set LesBonBlasts {}
    foreach LeBlast $LesBlasts {
	LConcat LeBlast $LaFin
	lappend LesBonBlasts [join $LeBlast "\n"]
    }
    if {$Nieme=="All"} { return $LesBonBlasts }
    if {[regexp {^[0-9]+$} $Nieme]} { incr Nieme -1 }
    set BlastNonTrie [lindex $LesBonBlasts $Nieme]
    if {$Trie} {
	set BlastTrie [DecortiqueBlast $BlastNonTrie "SansSeuilExpect" "SansLimiteDeNombre" RetourneBlastTrie]
	return $BlastTrie
    }
    return $BlastNonTrie
}

proc TestBlastReduit {} {
    BlastReduit PGS542 [LesLignesDuFichier liste.txt] AEnlever
    exit
}

proc BlastReduit {NomOuFichier ListeDesHits {AGarder ""}} {

    if {$AGarder=="AEnlever"} { set AGarder 0 } else { set AGarder 1 }
    set AEnlever [expr  ! $AGarder]

    foreach Hit $ListeDesHits {
	scan $Hit "%s" BId
	set BID [string toupper $BId]
	if {$AGarder}  { set Garder($BID) 1 }
	if {$AEnlever} { set Enlever($BID) 1 }
    }


    if {[regexp "/" $NomOuFichier]} {
	set Fichier $NomOuFichier
    } else {
	set Nom $NomOuFichier
	set Fichier "[RepertoireDuGenome]/blastp/$Nom"
    }

    if { ! [file exists $Fichier]} { return {} }

    set AvantListe 1
    set DansListe 0
    set DansFin 0
    foreach Ligne [LesLignesDuFichier $Fichier] {
	if { $DansFin } {
	    lappend LeNouveau $Ligne
	    continue
	}
	if {[regexp "  Database:" $Ligne]} {
	    lappend LeNouveau $Ligne
	    set DansFin 1
	    continue
	}
	if { $AvantListe } {
	    if { [regexp "Sequences producing" $Ligne] } { set AvantListe 0 }
	    lappend LeNouveau $Ligne
	    set DansListe 1
	    set PremierBlanc 1
	    continue
	} 
	if {[regexp "^>" $Ligne]} {
	    scan $Ligne "%s %s" BId Access
	    regsub ">" $BId "" BId
	    set BID [string toupper $BId]
	    set ACCESS [string toupper $Access]

	    if {[info exists Garder($BID)] || [info exists Garder($ACCESS)]} {
		set GarderAlignement 1
		lappend LeNouveau $Ligne
	    } else {
		set GarderAlignement 0
	    }
	    continue
	}   
	if {[info exists GarderAlignement]} {
	    if {$GarderAlignement} {
		lappend LeNouveau $Ligne
	    }
	    continue
	}
	if {$DansListe} {
	    if { $PremierBlanc } {
		lappend LeNouveau $Ligne
		set DansListe 1
		set PremierBlanc 0
		continue
	    }
	    if { ! [regexp -nocase {[A-Z]} $Ligne]} {
		set DansListe 0
		lappend LeNouveau $Ligne
		continue
	    }
	    scan $Ligne "%s %s" BId Access
	    set BID [string toupper $BId]
	    set ACCESS [string toupper $Access]

	    if {$AEnlever && ! [info exists Enlever($BID)]} { set Garder($BID) 1 }

	    if {[info exists Garder($BID)] || [info exists Garder($ACCESS)]} {
		lappend LeNouveau $Ligne
	    }
	    continue
	}
    }
    return $LeNouveau
}

proc EstUnAccessSwissprot Access {
    if {[regexp -nocase "^SW\:" $Access]} { return 1 } else { return 0}
}

proc LesElusDuBlastPParBandelettesPourTous {{Source ""}} {
    foreach Nom [ListeDesPABs] {
	set LesElus [LesElusDuBlastPParBandelettes $Nom $Source]
	Espionne $LesElus
    }
}

proc LesElusDuBlastPParMounirPourTous {{Source ""}} {
    foreach Nom [ListeDesPABs] {
	set LesElus [LesElusDuBlastPParMounir $Nom $Source]
	Espionne $LesElus
    }
}

proc LesElusDuBlastPAuChoixPourTous {{Source ""}} {
    foreach Nom [ListeDesPABs] {
	set LesElus [LesElusDuBlastPAuChoix $Nom $Source]
	Espionne $LesElus
    }
}

proc LesElusDuBlastPParBandelettes {Nom {Source ""} {Show ""} {SeuilExpect ""} {LoinToujours ""}} {

    #rR On peut forcer a prendre les eloignes. (je ne sais plus pourquoi ...) 
    if {$LoinToujours!=""} {
	if {[regexp -nocase "NotUsed" $LoinToujours]} {
	    LoinToujours "NotUsed"
	} else {
	    LoinToujours $LoinToujours "Set"
	}
    }

    if {$SeuilExpect==""} { set SeuilExpect 0.001 }

    set NomOrigine $Nom
    set Nom [file tail $Nom]

    set NombreMiniDeProches 20
    set MaxNbElus 200
    if {[OnTraiteMS2PH]} {
	set MaxNbElus 9999
	set NombreMiniDeProches 1
    }

    if {$Show==""} { set Show "DontShow" }
    if {$Show=="Show"} { set Show 1 } else { set Show 0 }

    set NomOuFichier $Nom
    if { ! [EstUnPAB $Nom]} { set NomOuFichier $NomOrigine }
    set LesLBsEtLeursCandidats [LesBandelettesDuBlast $NomOuFichier $Source]

    set LesElus {}
    set TousLesProches {}
#    set DejaBascule 1
    set NbElus 0
    foreach {LB SesCandidats} $LesLBsEtLeursCandidats {
	catch {unset PremierSW}
	catch {unset PremierTout}
	catch {unset PremierPDB}
	foreach Candidat $SesCandidats {
	    scan $Candidat "%s %s %s %s %s %s" LogPN BId Access PN DE OX
	    if {[EstUnAccessPDB $BId]} {
		if { ! [info exists PremierPDB]} { set PremierPDB $BId }
		continue
	    }
	    if {[EstUnAccessSwissprot $BId]} {
		if { ! [info exists PremierSW]} { set PremierSW $BId }
	    }
	    if { ! [info exists PremierTout]} { set PremierTout $BId }		
	}
	set Capital ""
	if {       [info exists PremierSW]} {
	    set Capital $PremierSW
	} elseif { [info exists PremierTout]} {
	    set Capital $PremierTout
	} elseif { [info exists PremierPDB]} {
	    set Capital $PremierPDB
	}
	set NProchesPrisPourCetteBandelette 0
	foreach Candidat $SesCandidats {
	    set OX ""
	    scan $Candidat "%s %s %s %s %s %s" LogPN BId Access PN DE OX
	    lappend LesProches "$BId $Access $PN $OX"
#	    Espionne "$BId $PN"
	    set BonAPrendre [expr [LoinToujours $PN] || [EstUnAccessPDB $BId] || \
		    $PN<=$SeuilExpect && [string equal $BId $Capital]]
#	    Espionne "$BId $PN $BonAPrendre [EstUnAccessPDB $BId] "
	    if {$BonAPrendre} {
		lappend LesElus "$BId $Access $PN $OX"
		set NbElus [llength $LesElus]
		if {$NbElus > $MaxNbElus} { break }
	    }
	    if {$PN<=$SeuilExpect} {
		    lappend TousLesProches "$BId $Access $PN $OX"
	    } else {
		if { ! [info exists DejaBascule] && [llength $LesElus]<$NombreMiniDeProches} {
		    set DejaBascule 1
		    lappend TousLesProches "$BId $Access $PN $OX"
		    set LesElus $TousLesProches
		}
	    }
	}
	if {$NbElus > $MaxNbElus} { break }
    }
    if {$Show} {
	set Fen [AfficheUneSortieBlast $Nom]
	set LesBIds {}
	foreach Elu $LesElus {
	    scan $Elu "%s" BId
	    lappend LesBIds $BId
	}
	IllumineLaListe $LesBIds $Fen
#	FaireSavoir "On passe au suivant de $Nom"
#	destroy $Fen
#	global KduGraphe ; destroy [winfo parent $KduGraphe]
#	set Show [OuiOuNon "Do I continue to show the selected accesses ?"]
    }
    return $LesElus
}

proc LesElusDuBlastPParAuChoix {Nom {Source ""} {Show ""}} {

    JeMeSignale

    set Nom [file tail $Nom]

    set MaxNbElus 200

    if {$Show==""} { set Show "DontShow" }
    if {$Show=="Show"} { set Show 1 } else { set Show 0 }

    set LesElus [AuChoixDuBlast $Nom "GetList"]

    if {$Show} {
	set Fen [AfficheUneSortieBlast $Nom]
	set LesBIds {}
	foreach Elu $LesElus {
	    scan $Elu "%s" BId
	    lappend LesBIds $BId
	}
	IllumineLaListe $LesBIds $Fen
#	FaireSavoir "On passe au suivant de $Nom"
#	destroy $Fen
#	global KduGraphe ; destroy [winfo parent $KduGraphe]
#	set Show [OuiOuNon "Do I continue to show the selected accesses ?"]
    }
    return $LesElus
}

proc LesElusDuBlastPParMounir {Nom {Source ""} {Show ""}} {

    JeMeSignale

    set Nom [file tail $Nom]

    set MaxNbElus 200

    if {$Show==""} { set Show "DontShow" }
    if {$Show=="Show"} { set Show 1 } else { set Show 0 }

    set LesElus [MounirDuBlast $Nom "GetList"]

    if {$Show} {
	set Fen [AfficheUneSortieBlast $Nom]
	set LesBIds {}
	foreach Elu $LesElus {
	    scan $Elu "%s" BId
	    lappend LesBIds $BId
	}
	IllumineLaListe $LesBIds $Fen
#	FaireSavoir "On passe au suivant de $Nom"
#	destroy $Fen
#	global KduGraphe ; destroy [winfo parent $KduGraphe]
#	set Show [OuiOuNon "Do I continue to show the selected accesses ?"]
    }
    return $LesElus
}

proc LesBandelettesDuBlast {FichierOuNom {Source ""} {AvecSize ""} {OnGraphe ""}} {

    global OnGrapheLesBandelettes
    if { ! [info exists OnGrapheLesBandelettes]} { set OnGrapheLesBandelettes 0 }

    if {$OnGraphe==""} { set OnGraphe "DontGraphe" }
    if {$OnGraphe=="OnGraphe"} { set OnGraphe 1 } else { set OnGraphe 0 }

    set NombreDeBandelettes 40
    if {[OnTraiteMS2PH]} { set NombreDeBandelettes 100 }
    if {[PreFixe]=="RO"} { set NombreDeBandelettes 100 }
    set Nom [file tail $FichierOuNom]

    set MaxADecortiquer "SansLimiteDeNombre"
    set SeuilExpect "SansSeuilExpect"
    if {$AvecSize=="AvecSize"} { set AvecSize 1 } else { set AvecSize 0 }
    if {$AvecSize} {
	scan [TailleDuDescriptifDuBlastP] "%d %d %d %f" MinObliges MaxVoulus MaxPDB SeuilExpect 
	set MaxADecortiquer [expr $MaxVoulus+$MaxPDB]
	global SeuilExpectPourJulie
	if {[info exists SeuilExpectPourJulie]} { set SeuilExpect $SeuilExpectPourJulie }
    }

    if {[regexp "/" $FichierOuNom]} {
	set Fichier $FichierOuNom
    } else {
	if {$Source==""} { set Source "blastp" }
	set Fichier "[RepertoireDuGenome]/$Source/$Nom"
    }
    if {$Source==""} { 
	if {[regexp "daedalus" $Fichier]} {
	    set Source "daedalushits"
	} else {
	    set Source "blast"
	}
    }


    if { ! [file exists $Fichier]} {
	FaireLire "$Fichier doesn't exist. I'll cancel LaSelectionDuBlast"
	return ""
    }
    set LesCandidats {}
    if {[regexp "daedalushits" $Source]} {
	set Texte [ContenuDuFichier $Fichier]
	set PN 0.0009876
	while 1 {
	    set BlastHit [ValeurDeLaBalise "BlastHit" Texte "Rogner" BH]
	    if {$BlastHit==""} { break }
	    set BanqueId $BH
	    set Access   $BH
	    set AccessOK $BH
	    set OldPN $PN
	    set ID [ValeurDeLaBalise "ID" BlastHit "NePasRogner"]
	    if {[regexp VARSPLIC $ID]} { continue }
	    set AC [ValeurDeLaBalise "AC" BlastHit "NePasRogner"]
	    set PN [ValeurDeLaBalise "PN" BlastHit "NePasRogner"]
	    if {$PN=="0.000999"} { set PN $OldPN }
	    set OX [ValeurDeLaBalise "OX" BlastHit "NePasRogner"]
	    set GN [ValeurDeLaBalise "GN" BlastHit "NePasRogner"]
	    set DE [ValeurDeLaBalise "DE" BlastHit "NePasRogner"]
	    set OS [ValeurDeLaBalise "OS" BlastHit "NePasRogner"]
	    set OC [ValeurDeLaBalise "OC" BlastHit "NePasRogner"]
	    set CandId [lindex [split $ID " "] 0]
	    set CandAc [lindex [split $AC " "] 0]
	    if {$CandId==""} { set CandId $BanqueId }
	    if {$CandAc==""} { set CandAc $Access }
	    if {$OS=="" && $OX!=""} { set OS [Tax $OX "Name"] } 
	    regsub -all " " $DE "_" BeauDE
	    set Candidat "$CandId $CandAc $PN $BeauDE $OX $OS $OC"
	    lappend LesCandidats $Candidat
	}
    }
    if {[regexp "blast" $Source]} {
	set n [DecortiqueBlast $Fichier $SeuilExpect $MaxADecortiquer \
		Query lBanqueId lAccess lDE lProfil lPN]
	foreach CandId $lBanqueId CandAc $lAccess PN $lPN DE $lDE {
	    regsub -all " " $DE "_" BeauDE
	    set Candidat "$CandId $CandAc $PN $BeauDE"
	    lappend LesCandidats $Candidat
	}
    }

    if {$LesCandidats=={}} { return "" }

    set LesPNs {}
    set LesLogPNs {}
    foreach Candidat $LesCandidats {
	set DE ""
	set OX ""
	scan $Candidat "%s %s %s %s %s" CandId CandAc PN DE OX
	set BonPN $PN
	if {$PN< 1.e-200} { set BonPN 1.e-200 }
	set LogPN [expr log10($BonPN)]
	lappend LesPNs $PN
	lappend LesLogPNs $LogPN
    }

    if {$OnGraphe || $OnGrapheLesBandelettes} {
	set K [Graphe $LesLogPNs]
	global KduGraphe ; set KduGraphe $K
    }

    if {$LesPNs=={}} {return {}}
    if {[llength $LesPNs]==1} {return [list [lindex $LesPNs 0] $LesCandidats]}
    set Prems [lindex $LesLogPNs 0]
    set Derns [lindex $LesLogPNs end]
    set Ecart [expr (1.*($Derns-$Prems))/$NombreDeBandelettes]
    set L $Prems
    while {$L<$Derns} {
	lappend LesLimites $L
	set L [expr $L + $Ecart]
    }
    lappend LesLimites 999999
    set LesLimitesHautes [lrange $LesLimites 1 end]
    set LB [lindex $LesLimites 0]
    set LH [lindex $LesLimitesHautes 0]

    set Compte -4
    set i 0
    foreach LogPN $LesLogPNs Candidat $LesCandidats {
	incr Compte
	while 1 {
	    if {$LB<=$LogPN && $LogPN<$LH} { break }
	    if {[incr i] >= [llength $LesLimites]} { break }
	    set LB [lindex $LesLimites $i]
	    set LH [lindex $LesLimitesHautes $i]
	}
	if { ! [info exists LesCandidatsPour($LB)]} {
	    lappend LesLBs $LB
	    lappend LesChoixX $LogPN $LogPN $LogPN
	    lappend LesChoixY $Compte [expr $Compte +1] [expr $Compte +2]
	}
	lappend LesCandidatsPour($LB) "$LogPN $Candidat"
    }
    if {$OnGraphe || $OnGrapheLesBandelettes} {
	Graphe $LesChoixY $LesChoixX $K "red"
	Graphe [lrange $LesLimites 0 end-1] "" $K "green"
    }
    foreach LB $LesLBs {
	if { ! [info exists LesCandidatsPour($LB)]} { continue }
	set SesCandidats {}
	foreach Candidat [set LesCandidatsPour($LB)] {
	    lappend SesCandidats $Candidat
	}
	lappend LesLBsEtLeursCandidats $LB $SesCandidats
    }
    return $LesLBsEtLeursCandidats
}

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