Index by: file name |
procedure name |
procedure call |
annotation
gscope_orfs.tcl
(annotations | original source)
proc LesFantomesEnFrameshift {} {
foreach Nom [ListeDesPABs] {
if { ! [Fantome $Nom]} { continue }
if { ! [regexp "FS ok" [ExtraitInfo $Nom "EP:"]]} { continue }
Informe $Nom
}
exit
}
proc BornesBonSens {} {
foreach NomDebutFinOrient [LesLignesDuFichier "[RepertoireDuGenome]/fiches/bornesdespabs"] {
ExtraireDe $NomDebutFinOrient N D F O
if {$D>$F} { set W $D ; set D $F ; set F $W }
lappend Sortie "$N $D $F $O"
}
SauveLesLignes $Sortie dans "[RepertoireDuGenome]/fiches/bornesdespabsOK"
exit
}
proc PossibleFrameshift Nom {
global PossibleFrameshift
if {[info exists PossibleFrameshift($Nom)]} { return [set PossibleFrameshift($Nom)] }
if {[info exists PossibleFrameshift("EstCharge")]} { return [set PossibleFrameshift("EstCharge")] }
set PossibleFrameshift("EstCharge") "-1 -1"
set FichierFrameshifts "[RepertoireDuGenome]/fiches/Frameshifts"
foreach Ligne [LesLignesDuFichier $FichierFrameshifts] {
scan $Ligne "%d %d" D F
set Raisons ""
if {[regexp "=" $Ligne]} {
set Raisons [StringSuivant "=" dans $Ligne]
regsub {=.*} $Ligne "" Ligne
}
foreach NomLu [lrange [LesMotsDeLaLigne [split $Ligne " "]] 2 end] {
set Debut [Box $NomLu debut]
set Fin [Box $NomLu fin]
if {[Box $NomLu orient]=="F"} {
set DN [expr $D-$Debut+1]
set FN [expr $F-$Debut+1]
} else {
set DN [expr $Fin-$F+1]
set FN [expr $Fin-$D+1]
}
set DP [expr ($DN-1)/3+1]
set FP [expr $FN/3]
set PossibleFrameshift($NomLu) "$D $F $DN $FN $DP $FP $Raisons"
}
}
return [PossibleFrameshift $Nom]
}
proc LocaliseLesFrameshifts {{FichierFrameshifts ""}} {
if {$FichierFrameshifts==""} { set FichierFrameshifts "[RepertoireDuGenome]/fiches/Frameshifts" }
if {[regexp "All$" $FichierFrameshifts]} { set OnlyFS 0 } else {set OnlyFS 1}
foreach Nom [ListeDesPABs] {
if { $OnlyFS && ! [regexp -nocase "FS ok|FS Nt|FS Ct|Gap" [ExtraitInfo $Nom "EP"]]} { continue }
set Raison [ExtraitInfo $Nom "EP"]
regsub -all " " $Raison "_" Raison
foreach Fichier [LesBlastXDesHitsMultiples $Nom] {
if {[info exists DejaVu($Fichier)]} { continue }
set DejaVu($Fichier) $Nom
set NN [file tail $Fichier]
set Offset [Box $Nom debut]
foreach Ligne [LesLignesDuFichier $Fichier] {
if { ! [regexp "nucleic sequence from" $Ligne]} { continue }
set Moi [StringApres "nucleic sequence from " dans $Ligne]
set Lui [StringApres "$Moi to " dans $Ligne]
set Offset [Mini [Box $Moi debut] [Box $Lui debut]]
break
}
set Loc "[LocaliseLeFrameshiftDuBlastX $Fichier] $NN"
scan $Loc "%d %d" D F
set Localisation "[expr $D+$Offset-1] [expr $F+$Offset-1]"
set Resultat "$Localisation $NN $Raison"
Espionne $Resultat
lappend LesLocs $Resultat
}
}
set Localisations {}
set OldLoc ""
set Noms ""
lappend LesLocs "-1 -1 xxx"
foreach Ligne $LesLocs {
scan $Ligne "%d %d %s %s" D F Nom Raison
if {$Nom=="xxx" || ($OldLoc!="" && "$D $F"!=$OldLoc)} {
lappend Localisations "$OldLoc [join $LesNoms " "] = [join $LesRaisons "+"]"
set LesNoms {}
set LesRaisons {}
}
lappend LesNoms $Nom
lappend LesRaisons $Raison
set OldLoc "$D $F"
}
return [SauveLesLignes $Localisations dans $FichierFrameshifts]
}
proc LocaliseLeFrameshiftDuBlastX Fichier {
global SeuilExpectPourBlastX ; set SeuilExpectPourBlastX 10.1234
set A -1 ; set B -1
foreach Ligne [ChaqueProteineDuBlastX $Fichier] {
scan $Ligne "%s %d %d %s %s %f %f %d %d %d %d" NomLu N I Access Orga S E DQ FQ DS FS
if {$I==1} { set LesPos {} }
lappend LesPos $DQ
lappend LesPos $FQ
if {$I==1} { continue }
set LesPos [lsort -integer $LesPos]
set A [lindex $LesPos 1]
set B [lindex $LesPos 2]
break
}
return "[Mini $A $B] [Maxi $A $B]"
}
proc EtudeCodonStart {{CommenceIci ""}} {
global PagePropre
set Moi [FrappeQuUnCoup $CommenceIci "set"]
foreach Nom [ListeDesPABs] {
if {[FrappeQuUnCoup $Nom $Moi] } { continue }
if {[set CS [CodonStart $Nom]]==""} { continue }
set F [TestCodonStartEtDeletionDuMSF $Nom]
MetIt $Nom "Ask"
catch {unset PagePropre($F) ; after 10 Destroy $F ; FermeFenetre}
if {[JArreteDeBosser $Moi]} { return "JArreteDeBosser" }
}
}
proc RejectIt {Nom {Raison ""}} {
if {$Raison==""} { set Raison "Ask" }
if {$Raison=="Ask"} { return [Informe $Nom "Rejected: "] }
if {[regexp "ParDecret" $Raison]} {
return [InformeSansDemander $Nom "=Rejected: $Raison date [Date Nice]"]
}
return [Informe $Nom "Rejected: $Raison"]
}
proc MetIt {Nom {Raison ""}} {
if {$Raison==""} { set Raison "Ask" }
set MVL [string index [QueLaSequenceDuFichierTFA "[RepertoireDuGenome]/prottfa/$Nom"] 0]
if {$Raison=="Ask"} { return [Informe $Nom "CSP: $MVL 1"] }
if {[regexp "ParDecret" $Raison]} {
return [InformeSansDemander $Nom "CSP: $MVL 1 $Raison date [Date Nice]"]
}
return [Informe $Nom "CSP: $MVL 1 $Raison"]
}
proc AfficheLesBlastXDesHitsMultiples Nom {
foreach Fichier [LesBlastXDesHitsMultiples $Nom] {
AfficheFichier $Fichier "AvecSegAlignement"
}
return
}
proc LesBlastXDesHitsMultiples Nom {
global LesBlastXDesHitsMultiples
if {[info exists LesBlastXDesHitsMultiples($Nom)]} { return [set LesBlastXDesHitsMultiples($Nom)] }
if {[info exists LesBlastXDesHitsMultiples("EstCharge")]} { return {} }
set LesBlastXDesHitsMultiples("EstCharge") 1
foreach Fichier [glob "[RepertoireDuGenome]/blastxmultiples/*"] {
if { ! [regexp {MS[]0-9]+} $Fichier NomLu]} { continue }
lappend LesBlastXDesHitsMultiples($NomLu) $Fichier
}
return [LesBlastXDesHitsMultiples $Nom]
}
proc RenommeLesBlastX {} {
foreach Fichier [glob *] {
if { ! [regexp {MS[]0-9]+} $Fichier Nom]} { continue }
if {[file exists $Nom]} { continue }
file rename $Fichier $Nom
}
exit
}
proc BlastXDesHitsMultiplesPourTous {} {
foreach Nom [ListeDesPABs] {
set LesBlastX [BlastXDesHitsMultiples $Nom]
Espionne "$Nom $LesBlastX"
}
exit
}
proc BlastXDesHitsMultiples Nom {
set MesHits [HitMultiple $Nom]
if {$MesHits=={}} { return "" }
set Moi $Nom
set Eux {}
if {[info exists DejaLui]} { unset DejaLui }
foreach Hit $MesHits {
scan $Hit "%s" Lui
set Nous "$Moi$Lui"
set FichierNous "[RepertoireDuGenome]/blastxmultiples/$Nous"
if {[file exists $FichierNous]} { continue }
if {[info exists DejaVu($Lui,$Moi)]} { continue }
if {[info exists DejaLui($Lui)]} { continue }
set DejaLui($Lui) 1
set DejaVu($Moi,$Lui) 1
set DMoi [Box $Moi debut]
set FMoi [Box $Moi fin]
set DLui [Box $Lui debut]
set FLui [Box $Lui fin]
set D [Mini $DMoi $DLui]
set F [Maxi $FMoi $FLui]
set ADN [BoutADN $D $F "F"]
set TFA [SequenceFormatTFA $ADN "$Moi$Lui nucleic sequence from $Moi to $Lui"]
set FichierTFA [Sauve $TFA dans "[TmpFile $Moi$Lui].tfa"]
set LesCommuns {}
foreach ReHit [HitMultiple $Nom] {
scan $ReHit "%s %s" LuiLu Access
if {$LuiLu!=$Lui} { continue }
lappend LesCommuns "$Access $Access"
}
if {$LesCommuns=={}} { continue }
set FichierBlast "[TmpFile $Moi$Lui].blastx"
set Communs [join $LesCommuns "\n"]
set BlastXDataBase "[RepertoireDeTravail]/$Moi$Lui"
if {[file exists $BlastXDataBase]} { file delete $BlastXDataBase }
set BlastXDataBase [CreeUneBanqueBlast $Communs $BlastXDataBase]
set CommandeBlast "blastall \
-p blastx \
-i $FichierTFA \
-o $FichierBlast.encours \
-d $BlastXDataBase \
-v 50 \
-b 50 "
if {[OuiOuNonMemo "Do You want to edit the Blast command ?" 0]} {
set CommandeBlast [Entre $CommandeBlast]
if {$CommandeBlast==""} { return "" }
}
if {[catch {eval exec $CommandeBlast} Message]} { Espionne $Message }
if { ! [file exists "$FichierBlast.encours"]} {
Espionne "No $FichierBlast"
continue
}
file copy -force $FichierBlast.encours $FichierNous
lappend Eux $Lui
}
return $Eux
}
proc TestFrappeQuUnCoup {} {
Espionne [set Moi [FrappeQuUnCoup "AskWhereToBegin" "set"]]
Espionne [FrappeQuUnCoup PGS015 $Moi]
Espionne [FrappeQuUnCoup PGS111 $Moi]
Espionne [FrappeQuUnCoup PGS018 $Moi]
}
proc FrappeQuUnCoup {Nom Qui {Liste ""}} {
global FrappeQuUnCoup
if {[info exists FrappeQuUnCoup($Qui,Indice)]} {
set Indice [set FrappeQuUnCoup($Qui,Indice)]
if {$Indice<0} { return 0 }
set Liste [set FrappeQuUnCoup($Qui,Liste)]
set IndiceDeNom [lsearch -exact $Liste $Nom]
return [expr $IndiceDeNom < $Indice]
}
if {$Qui=="set"} {
set Moi [NomDe "Frappeur"]
if {$Nom=="AskWhereToBegin"} {
if {[OuiOuNon "Do you want to begin with a given [PreFixe] ?"]} {
if {$Liste==""} { set Liste [ListeDesPABs] }
set Nom [ChoixParmi $Liste]
}
}
if {$Nom==""} {
set Indice -1
} else {
if {$Liste==""} { set Liste [ListeDesPABs] }
set FrappeQuUnCoup($Moi,Liste) $Liste
set Indice [lsearch -exact $Liste $Nom]
}
set FrappeQuUnCoup($Moi,Indice) $Indice
return $Moi
}
return 0
}
proc CommenceIci CommenceIci {
if {$CommenceIci=="AskWhereToBegin"} {
if {[OuiOuNon "Do you want to begin with a given [Prefixe] ?"]} {
set CommenceIci [Entre [PreFixe]]
}
}
return $CommenceIci
}
proc HitMultiple Nom {
global HitMultiple
if {[info exists HitMultiple($Nom)]} { return [set HitMultiple($Nom)] }
if {[info exists HitMultiple("EstCharge")]} { return {} }
foreach Ligne [LesLignesDuFichier "[RepertoireDuGenome]/fiches/LesHitsMultiples"] {
scan $Ligne "%s %s %s" NomLu Autre Hit
lappend HitMultiple($NomLu) "$Autre $Hit"
}
set HitMultiple("EstCharge") 1
return [HitMultiple $Nom]
}
proc LesHitsDe Nom {
set SeuilExpect 10.
set MaxListe 10
set FichierBlast "[RepertoireDuGenome]/blastp/$Nom"
if { ! [file exists $FichierBlast]} { return {} }
set lAccess {}
DecortiqueBlast $FichierBlast $SeuilExpect $MaxListe Query lBanqueId lAccess lDE lProfil lPN
return $lAccess
}
proc LesHitsMultiples {} {
set FichierDesHits "[RepertoireDuGenome]/fiches/LesHitsMultiples"
set LesPABs [LesPABsDansLOrdre]
set i 1
set LesCourants [lrange $LesPABs 0 4]
foreach Nom $LesCourants {
set LesHitsDe($Nom) [LesHitsDe $Nom]
}
foreach Suivant [lrange $LesPABs 5 end] {
set Nom [lindex $LesCourants 2]
foreach Autre $LesCourants {
if {$Autre==$Nom} { continue }
foreach MonHit [set LesHitsDe($Nom)] {
foreach SonHit [set LesHitsDe($Autre)] {
if { ! [string equal -nocase $MonHit $SonHit]} { continue }
Espionne "$Nom $Autre $MonHit"
lappend LesHitsMultiples($Nom) "$Autre $MonHit"
AppendAuFichier $FichierDesHits "$Nom $Autre $MonHit"
}
}
}
set Premier [lindex $LesCourants 0]
unset LesHitsDe($Premier)
set LesCourants [lreplace $LesCourants 0 0]
lappend LesCourants $Suivant
set LesHitsDe($Suivant) [LesHitsDe $Suivant]
}
}
proc LesZonesEnOverlapMultiple Nom {
set Debut [Box $Nom debut]
set Fin [Box $Nom fin]
set Orient [Box $Nom orient]
set Long [expr $Fin-$Debut+1]
set NombreMinimumDeCopainsNecessaires 5
set LesZones [LesZonesEnOverlap $Nom]
set LesZonesEtendues {}
foreach Zone $LesZones {
scan $Zone "%d %d %d %s" P D F Voisin
if {[Fantome $Voisin]} { continue }
if {[NombreDeCopainsDansBlast $Voisin]<$NombreMinimumDeCopainsNecessaires} { continue }
incr D -15
incr F 15
lappend LesZonesEtendues "$P $D $F $Voisin"
}
set LesZonesEtendues [lsort -integer -index 1 $LesZonesEtendues]
if {$LesZonesEtendues=={}} { return {} }
set LesRecouvrements {}
set LesZonesRestantes $LesZonesEtendues
foreach ZonePremiere $LesZonesEtendues {
set LesZonesRestantes [lrange $LesZonesRestantes 1 end]
if {[info exists DejaVu($ZonePremiere)]} { continue }
scan $ZonePremiere "%d %d %d %s" P D F Voisin
set DMin $D
set FMax $F
foreach Zone $LesZonesRestantes {
scan $Zone "%d %d %d %s" P D F Voisin
if {$D>$FMax} { break }
set DejaVu($Zone) 1
set FMax [Maxi $F $FMax]
}
set DMin [Maxi $DMin $Debut]
set FMax [Mini $FMax $Fin]
set PCent [expr (100*($FMax-$DMin+1))/$Long]
lappend LesRecouvrements "$PCent $DMin $FMax"
}
return $LesRecouvrements
}
proc LesZonesEnOverlap {Nom {Quoi ""}} {
if {$Quoi==""} { set Quoi "LesZonesTriees" }
set Debut [Box $Nom debut]
set Fin [Box $Nom fin]
set Orient [Box $Nom orient]
set Long [expr $Fin-$Debut+1]
if {$Long<1} { return "" }
set LesOverlaps [split [Overlap $Nom] "/"]
set LesZones {}
foreach Ovl $LesOverlaps {
regexp "I am in|I contain|I begin in|I end in" $Ovl Type
set Voisin [StringApres $Type dans $Ovl]
if {[Fantome $Voisin]} { continue }
set D [IntegerApres "from" dans $Ovl]
set F [IntegerApres "to" dans $Ovl]
set L [expr $F-$D+1]
set P [expr (100*$L)/$Long]
lappend LesZones "$P $D $F $Voisin"
}
if {$Quoi=="LesZones"} { return $LesZones }
set LesZonesTriees [lsort -decreasing -integer -index 0 $LesZones]
if {$Quoi=="LesZonesTriees"} { return $LesZonesTriees }
FaireLire "ZonesEnOverlap wrong argument"
return
}
proc VerifieLesOverlapsPlusGrandsQue {{LongMini 18}} {
global ListeDeBoites
global KanvaCourant
if { ! [info exists ListeDeBoites] } { ChargeListeDeBoites }
foreach Boite $ListeDeBoites {
set Nom [Box $Boite nom]
if {[Fantome $Nom]} { continue }
foreach Ovl [split [Overlap $Nom] "/"] {
if {[scan $Ovl "%d" Long] != 1} { continue }
if {$Long < $LongMini} { continue }
set Autre [StringApres "in" dans $Ovl]
if {[Fantome $Autre]} { continue }
if {[NombreDeCopainsDansBlast $Nom] >[NombreDeCopainsDansBlast $Autre]} { continue }
if {[NombreDeCopainsDansBlast $Nom] > 5} { continue }
if {[info exists KanvaCourant]} {
RepereBox $Nom $KanvaCourant
} else {
Informe $Nom
}
}
}
}
proc Fantome Nom {
set Valeur [ExtraitInfo $Nom "Fantome"]
if { $Valeur == "" } { return 0 }
if {[regexp -nocase -- "oui" $Valeur]} {
return 1
} else {
return 0
}
}
proc FantomisePourTous {{Ordre ""} {CommenceIci ""}} {
set Moi [FrappeQuUnCoup $CommenceIci "set"]
if {$Ordre==""} {
set LesChoix [list \
"Ask" "" "Ask for each" \
"AloneIsEnough" "" "All orf without ortholog become Ghost is ENOUGH" \
"AloneAndOverlapedByBetter" "" "All orf without ortholog become Ghost if OVERLAPED by better orf" \
"AloneAndOverlapedBySetOfORFs" "" "All orf without ortholog become Ghost if OVERLAPED by a set of better orfs"]
set Ordre [ChoixParmiJoliDansListe $LesChoix]
}
foreach Nom [ListeDesPABs] {
if {[FrappeQuUnCoup $Nom $Moi] } { continue }
if {[Fantome $Nom]} { continue }
set Status [Fantomise $Nom $Ordre]
if {[JArreteDeBosser $Moi]} { return "JArreteDeBosser" }
if {$Status==""} { continue }
Espionne "$Nom $Status"
}
}
proc Fantomise {Nom {Ordre ""}} {
global InformeSansDemander
if {$Ordre=="Ask"} {
Informe $Nom "Fantome: oui "
return [Fantome $Nom]
}
if {[regexp "ParDecret" $Ordre]} {
InformeSansDemander $Nom "Fantome: oui $Ordre date [Date Nice]"
return $Ordre
}
set Raison ""
set NCops [NombreDeCopainsDansBlast $Nom]
if {$NCops>3} { return "" }
if {$NCops==0} { append Raison " NoOrtholog" }
if {[regexp "AloneIsEnough" $Ordre] && [regexp "NoOrtholog" $Raison]} {
set Rapport "$Ordre $Raison"
InformeSansDemander $Nom "Fantome: oui $Rapport"
return $Rapport
}
set Ovl [Overlap $Nom]
foreach Zone [LesZonesEnOverlap $Nom] {
scan $Zone "%d %d %d %s" P D F Voisin
if {[Fantome $Voisin]} { continue }
if {$NCops >= [NombreDeCopainsDansBlast $Voisin]} { continue }
if {$P > 98} {
append Raison "FullOverlapedByBetterORF"
break
}
if {$P > 90} {
append Raison "OverlapedByBetterORF"
break
}
}
if {[regexp "Alone" $Ordre] && [regexp "NoOrtholog" $Raison] \
&& [regexp "FullOverlapedByBetterORF" $Raison]} {
set Rapport "$Ordre $Raison"
PositionneEtInforme $Nom "" "SansInforme"
Informe $Nom "Fantome: oui $Rapport"
return $Rapport
}
if {[regexp "Alone" $Ordre] && [regexp "NoOrtholog" $Raison] \
&& [regexp "OverlapedByBetterORF" $Raison]} {
set Rapport "$Ordre $Raison"
PositionneEtInforme $Nom "" "SansInforme"
Informe $Nom "Fantome: oui $Rapport"
return $Rapport
}
foreach Multiple [LesZonesEnOverlapMultiple $Nom] {
scan $Multiple "%d %d %d" P D F
if {$P > 75} {
append Raison "OverlapedBySetOfORFs"
break
}
}
if {[regexp "AloneAndOverlapedBySetOfORFs" $Ordre] && [regexp "NoOrtholog" $Raison] \
&& [regexp "OverlapedBySetOfORFs" $Raison]} {
set Rapport "$Ordre $Raison"
PositionneEtInforme $Nom "" "SansInforme"
Informe $Nom "Fantome: oui $Rapport"
return $Rapport
}
if {[regexp "LessThan3Orthologs" $Ordre] && \
[NombreDeCopainsDansBlast $Nom] < 3 && [regexp "FullOverlapedByBetterORF" $Raison]} {
append Raison "LessThan3Orthologs"
set Rapport "$Ordre $Raison"
PositionneEtInforme $Nom "" "SansInforme"
Informe $Nom "Fantome: oui $Rapport"
return $Rapport
}
return ""
}
proc CreeStartCodonReport {} {
global RepertoireDuGenome
set FichierReport "$RepertoireDuGenome/fiches/startcodon_report"
if {[file exists $FichierReport]} { set Copie [Garde $FichierReport] }
set AppendToIt 0
while {[file exists $FichierReport]} {
if {[OuiOuNon "$FichierReport already exists. \nDo I append to it ?"]} {
set AppendToIt 1
break
}
if {[OuiOuNon "$FichierReport already exists. \nDo I replace it ?"]} {
File delete -force $FichierReport
continue
}
if {[OuiOuNon "Do I cancel CreeStartCodonReport"]} { return "" }
}
set Cluster [LesLignesDuFichier "$RepertoireDuGenome/fiches/startcodon_cluster"]
set LesNoms {}
foreach Nom [ListeDesPABs] {
set LesSummary [StartCodonSummary $Nom]
if {[regexp "NoSummary" $LesSummary]} { continue }
foreach Ligne $LesSummary {
scan $Ligne "%s %s %s %s" iGGT AA Pos NbAccord
lappend LesNoms $Nom
lappend Classement($Nom) [list $AA $Pos $NbAccord]
set Commentaire($Nom) [StringSuivant "=" dans $Ligne]
}
}
set LesNoms [lsort -unique $LesNoms]
#Categories Raymond
# 0 Met initial conserve
# 1 Met initial a egalite
# 2 Autre met
# 3 Autre met a egalite
if {$AppendToIt} {
foreach Ligne [LesLignesDuFichier $FichierReport] {
scan $Ligne "%s %s %s" Nom Pos PC
if {[regexp {^(Pas|Probleme)} $Pos]} { continue }
set DejaVu($Nom) 1
}
}
foreach Nom $LesNoms {
if {[info exists DejaVu($Nom)]} { continue }
set MetIni($Nom) [join [lrange [lindex [set Classement($Nom)] 0] 0 1] ""]
set Classement($Nom) [lsort -integer -decreasing -index 2 [set Classement($Nom)]]
set liste [set Classement($Nom)]
if {[llength $liste]<=1 && [lindex [lindex $liste 0] 1]==1} {
set CatRay($Nom) 0
} else {
set Premier [lindex $liste 0]
set Second [lindex $liste 1]
if {[lindex $Premier 1]==1} {
if {[lindex $Premier 2]==[lindex $Second 2]} {
set CatRay($Nom) 1
} else {
set CatRay($Nom) 0
}
} else {
if {[lindex $Premier 2]==[lindex $Second 2]} {
set CatRay($Nom) 3
} else {
set CatRay($Nom) 2
}
}
}
}
#TRAITEMENT DES RESULTATS CLUSTERING
set lesNomsCl [list]
foreach Ligne $Cluster {
if { ! [regexp -nocase {[a-z]} $Ligne]} continue
while {[regexp " " $Ligne]} {
regsub -all " " $Ligne " " Ligne
}
set liste [split $Ligne " "]
set Nom [lindex $liste 0]
set Decal [lindex $liste 1]
set Percent [lindex $liste 2]
lappend LesNomsCl $Nom
if {[info exists Classement($Nom)]} {
set MetRaymond [join [lrange [lindex [set Classement($Nom)] 0] 0 1] ""]
} else {
set MetRaymond "X1"
}
if {[regexp "Pas" $Ligne] || ! [info exists CatRay($Nom)]} {
set Bilan($Nom) "white No_Value"
set StartCodonProposal($Nom) "None"
} else {
if {[regexp "Probleme" $Ligne]} {
set Bilan($Nom) "grey Problem"
set StartCodonProposal($Nom) "None"
} else {
if {$Decal != 0 || $Percent>50} {
set Bilan($Nom) "green Validated_Start_Codon"
set StartCodonProposal($Nom) [set MetIni($Nom)]
} else {
if {$Decal < -3} {
set Deb [Box $Nom debut]
set Fin [Box $Nom fin]
set Orient [Box $Nom orient]
scan [BornesDuGeneEtendu $Nom] "%s %s %s %s" x DebEtend FinEtend OrientEtend
if {$Deb==$DebEtend && $Fin==$FinEtend} {
set Bilan($Nom) "green Validated_Start_Codon"
set StartCodonProposal($Nom) [set MetIni($Nom)]
} else {
if {$Deb!=$DebEtend} {
set Diff [expr $Deb-$DebEtend]
} else {
set Diff [expr $FinEtend-$Fin]
}
set NucEtendu [BoutADN $DebEtend $FinEtend $OrientEtend]
set NewMet [AAduCodon [string range $NucEtendu 0 2]]
set NewPos [expr $Diff/3]
if {$NewPos>2} {
set Bilan($Nom) "blue Truncated_Gene"
set StartCodonProposal($Nom) "${NewMet}-$NewPos"
} else {
set Bilan($Nom) "green Validated_Start_Codon"
set StartCodonProposal($Nom) [set MetIni($Nom)]
}
}
} else {
set Cat [set CatRay($Nom)]
if {!$Cat} {
set Bilan($Nom) "green Validated_Start_Codon"
set StartCodonProposal($Nom) $MetRaymond
} else {
set NewDecal [expr $Decal+1]
set Classe [set Classement($Nom)]
set Diff 999
set MeilleurIndex -1
set Index 0
foreach el $Classe {
set Pos [lindex $el 1]
if {[expr abs($NewDecal-$Pos)]<$Diff} {
set Diff [expr abs($NewDecal-$Pos)]
set MeilleurIndex $Index
if {!$Diff} break
}
incr Index
}
set MeilleurOdile [lindex $Classe $MeilleurIndex]
set MetOdile [join [lrange $MeilleurOdile 0 1] ""]
if {$Cat==2} {
if {$Decal<0} {
set Bilan($Nom) "orange Doubtful_Start_Codon"
if {$MetRaymond==$MetOdile} {
set StartCodonProposal($Nom) $MetRaymond
} else {
set StartCodonProposal($Nom) $MetRaymond$MetOdile
}
} else {
if {!$MeilleurIndex} {
set Bilan($Nom) "red Wrong_Start_Codon"
set StartCodonProposal($Nom) $MetRaymond
} else {
set Bilan($Nom) "orange Doubtful_Start_Codon"
set StartCodonProposal($Nom) $MetRaymond$MetOdile
}
}
} else {
if {[lindex $MeilleurOdile 1]==1} {
set Bilan($Nom) "green Validated_Start_Codon"
set StartCodonProposal($Nom) $MetOdile
} else {
set Bilan($Nom) "orange Doubtful_Start_Codon"
set StartCodonProposal($Nom) $MetOdile
set Effectif [lindex [lindex $Classe 0] 2]
foreach el $Classe {
if {[lindex $el 2]!=$Effectif} break
if {[lindex $MeilleurOdile 1]== [lindex $el 1]} continue
set StartCodonProposal($Nom) "[set StartCodonProposal($Nom)][join [lrange $el 0 1] ""]"
}
}
}
}
}
}
}
}
if { ! [info exists Classement($Nom)]} { set Classement($Nom) " " }
set Report "$Nom [set Bilan($Nom)] [set StartCodonProposal($Nom)] $Decal [set Classement($Nom)]"
Espionne $Report
AppendAuFichier $FichierReport $Report
}
return $FichierReport
}
proc StartCodonClusterPourTous {{BorneSup 250}} {
global RepertoireDuGenome
set Affiche 0
set FichierStartCodonCluster "$RepertoireDuGenome/fiches/startcodon_cluster"
if {[file exists $FichierStartCodonCluster]} { set Copie [Garde $FichierStartCodonCluster] }
set LeNouveau {}
while {[file exists $FichierStartCodonCluster]} {
if {[OuiOuNon "$FichierStartCodonCluster already exists.\nDo I append to it ?"]} {
foreach Ligne [LesLignesDuFichier $FichierStartCodonCluster] {
scan $Ligne "%s" NomLu
if {[regexp -nocase "Pas de fichier msf" $Ligne]} { continue }
if {[regexp -nocase "Pas de groupe secator" $Ligne]} { continue }
Espionne "Je garde $Ligne"
lappend LeNouveau $Ligne
set DejaVu($NomLu) 1
}
SauveLesLignes $LeNouveau dans $FichierStartCodonCluster
break
}
if {[OuiOuNon "$FichierStartCodonCluster already exists.\nDo I replace it ?" 0]} {
File delete -force $FichierStartCodonCluster
break
}
if {[OuiOuNon "$FichierStartCodonCluster already exists.\n\
Do I cancel StartCodonClusterPourTous ?"]} {
return ""
}
}
foreach Nom [ListeDesPABs] {
if {[info exists DejaVu($Nom)]} { continue }
set Rapport [StartCodonCluster $Nom]
Espionne $Rapport
AppendAuFichier $FichierStartCodonCluster $Rapport
}
return $FichierStartCodonCluster
}
proc CreeLesPABsAbInitio {} {
global RepertoireDuGenome
global ADN TDN RAC
global PrefixeDesORFs
global LongueurMiniDesORFs
if { ! [info exists ADN]} { ChargeADNetTDNetRAC }
set LongADN [string length $ADN]
foreach DebutFrame {1 2 3} {
set Orient "F"
set DebutPotentiel $DebutFrame
while {$DebutPotentiel < $LongADN} {
set TrouveStart 0
for {set i $DebutPotentiel} {$i < [expr $LongADN-3]} {} {
set Codon [string range $ADN $i [expr $i+2]]
if {[CodonStartPossible $Codon]} {
set Debut $i
set TrouveStart 1
break
}
incr i 3
}
if { ! $TrouveStart} { break }
Wup "On a trouve un Met"
set TrouveStop 0
for {set i [expr $Debut+3]} {$i < [expr $LongADN-3]} {} {
set Codon [string range $ADN $i [expr $i+2]]
if {[CodonStopPossible $Codon]} {
set Fin [expr $i-1]
set TrouveStop 1
break
}
incr i 3
}
if { ! $TrouveStop} { set Fin [expr $i-1] }
if { [expr $Fin - $Debut] >= $LongueurMiniDesORFs } {
lappend ListeDesBornes($Orient) "ORF $Debut $Fin $Orient"
}
set DebutPotentiel [expr $Fin+1]
}
}
foreach DebutFrame {1 2 3} {
set Orient "R"
set DebutPotentiel $DebutFrame
while {$DebutPotentiel < $LongADN} {
set TrouveStart 0
for {set i $DebutPotentiel} {$i < [expr $LongADN-3]} {} {
set Codon [string range $RAC $i [expr $i+2]]
if {[regexp "ATG|TTG|GTG" $Codon]} {
set Debut $i
set TrouveStart 1
break
}
incr i 3
}
if { ! $TrouveStart} { break }
Wup "On a trouve un Met"
set TrouveStop 0
for {set i [expr $Debut+3]} {$i < [expr $LongADN-3]} {} {
set Codon [string range $RAC $i [expr $i+2]]
if {[CodonStopPossible $Codon]} {
set Fin [expr $i-1]
set TrouveStop 1
break
}
incr i 3
}
if { ! $TrouveStop} { set Fin [expr $i-1] }
if { [expr $Fin - $Debut] >= $LongueurMiniDesORFs } {
lappend ListeDesBornes($Orient) "ORF [expr $LongADN-$Fin] [expr $LongADN-$Debut] $Orient"
}
set DebutPotentiel [expr $Fin+1]
}
}
set ListeTriee(F) [lsort -increasing -command CompareLesMilieux $ListeDesBornes(F)]
set ListeTriee(R) [lsort -decreasing -command CompareLesMilieux $ListeDesBornes(R)]
set Numero 0
foreach Ligne [concat $ListeTriee(F) $ListeTriee(R)] {
scan $Ligne "%s %d %d %s" ORF Debut Fin Orient
set Nom [format "%s%4.4d" $PrefixeDesORFs [incr Numero]]
lappend ListeBornesDesPABs "$Nom $Debut $Fin $Orient"
}
set FichierBornesDesPABs "$RepertoireDuGenome/fiches/bornesdespabs"
if {[file exists $FichierBornesDesPABs]} {
if {[OuiOuNon "$FichierBornesDesPABs existe deja. Je stoppe tout ?"]} { exit }
}
Espionne [SauveLesLignes $ListeBornesDesPABs dans $FichierBornesDesPABs]
return 1
}
proc Glimmer3 {{NomNumeroDuDernier ""}} {
global RepertoireDuGenome
global FichierSequenceADN
# set Codons "_"
# if { [CodonStartPossible "ATG"] } { append Codons "M" }
# if { [CodonStartPossible "GTG"] } { append Codons "V" }
# if { [CodonStartPossible "TTG"] } { append Codons "L" }
# if {![CodonStopPossible "TGA"] } { append Codons "_TGA" }
#
# if {$Codons=="_"} { set Codons "" }
set Result "$RepertoireDuGenome/glimmer3/result"
if { ! [file exists "$Result.coord"] || \
[OuiOuNon "$Result.coord already exists.\n Do I recalculate it ? "]} {
set CommandeGlimmer "/home/perrodou/glimmer3.01/scripts/g3-iterated.csh $FichierSequenceADN $Result"
while { ! [OuiOuNon "I will run \n$CommandeGlimmer\nOK ?"]} {
if {[OuiOuNon "Do I abort Glimmer3 ?"]} { return "" }
if {[OuiOuNon "Do I exit ?"]} { exit }
set CommandeGlimmer [Entre $CommandeGlimmer]
}
if {$CommandeGlimmer!=""} {
set RepGlimmer "$RepertoireDuGenome/glimmer3"
if { ! [file exists $RepGlimmer]} {
file mkdir $RepGlimmer
}
NousAllonsAuBoulot $RepGlimmer
if {[catch {eval exec $CommandeGlimmer} Message]} {
if { ! [OuiOuNon "Glimmer3 sent me following message\n$Message\n\
\nCan I scan its output ?"]} {
OnRevientDuBoulot
return ""
}
}
OnRevientDuBoulot
}
}
if {[regexp "GLIMMER" $NomNumeroDuDernier]} {
SauveLesLignes [LesBornesDeGlimmer $NomNumeroDuDernier] dans "$RepertoireDuGenome/fiches/bornesdesglimmers2"
}
return 1
}
proc Glimmer2 {{NomNumeroDuDernier ""}} {
global RepertoireDuGenome
global FichierSequenceADN
# set Codons "_"
# if { [CodonStartPossible "ATG"] } { append Codons "M" }
# if { [CodonStartPossible "GTG"] } { append Codons "V" }
# if { [CodonStartPossible "TTG"] } { append Codons "L" }
# if {![CodonStopPossible "TGA"] } { append Codons "_TGA" }
#
# if {$Codons=="_"} { set Codons "" }
set Result "$RepertoireDuGenome/glimmer2/result"
if { ! [file exists "$Result.coord"] || \
[OuiOuNon "$Result.coord already exists.\n Do I recalculate it ? "]} {
set CommandeGlimmer "/biolo/glimmer2.13/run-glimmer2 $FichierSequenceADN $Result"
while { ! [OuiOuNon "I will run \n$CommandeGlimmer\nOK ?"]} {
if {[OuiOuNon "Do I abort Glimmer2 ?"]} { return "" }
if {[OuiOuNon "Do I exit ?"]} { exit }
set CommandeGlimmer [Entre $CommandeGlimmer]
}
if {$CommandeGlimmer!=""} {
set RepGlimmer "$RepertoireDuGenome/glimmer2"
if { ! [file exists $RepGlimmer]} {
file mkdir $RepGlimmer
}
NousAllonsAuBoulot $RepGlimmer
if {[catch {eval exec $CommandeGlimmer} Message]} {
if { ! [OuiOuNon "Glimmer2 sent me following message\n$Message\n\
\nCan I scan its output ?"]} {
OnRevientDuBoulot
return ""
}
}
OnRevientDuBoulot
}
}
if {[regexp "GLIMMER" $NomNumeroDuDernier]} {
SauveLesLignes [LesBornesDeGlimmer $NomNumeroDuDernier] dans "$RepertoireDuGenome/fiches/bornesdesglimmers2"
}
return 1
}
proc Glimmer {{NomNumeroDuDernier ""}} {
global RepertoireDuGenome
global FichierSequenceADN
set Codons "_"
if { [CodonStartPossible "ATG"] } { append Codons "M" }
if { [CodonStartPossible "GTG"] } { append Codons "V" }
if { [CodonStartPossible "TTG"] } { append Codons "L" }
if {![CodonStopPossible "TGA"] } { append Codons "_TGA" }
if {$Codons=="_"} { set Codons "" }
set Result "$RepertoireDuGenome/glimmer/result"
if { ! [file exists "$Result.coord"] || \
[OuiOuNon "$Result.coord already exists.\n Do I recalculate it ? "]} {
set CommandeGlimmer "run-glimmer$Codons $FichierSequenceADN $Result"
while { ! [OuiOuNon "I will run \n$CommandeGlimmer\nOK ?"]} {
if {[OuiOuNon "Do I abort Glimmer ?"]} { return "" }
if {[OuiOuNon "Do I exit ?"]} { exit }
set CommandeGlimmer [Entre $CommandeGlimmer]
}
if {$CommandeGlimmer!=""} {
set RepGlimmer "$RepertoireDuGenome/glimmer"
if { ! [file exists $RepGlimmer]} {
file mkdir $RepGlimmer
}
NousAllonsAuBoulot $RepGlimmer
if {[catch {eval exec $CommandeGlimmer} Message]} {
if { ! [OuiOuNon "Glimmer sent me following message\n$Message\n\
\nCan I scan its output ?"]} {
OnRevientDuBoulot
return ""
}
}
OnRevientDuBoulot
}
}
if {[regexp "GLIMMER" $NomNumeroDuDernier]} {
SauveLesLignes [LesBornesDeGlimmer $NomNumeroDuDernier] dans "$RepertoireDuGenome/fiches/bornesdesglimmers"
}
return 1
}
proc Enterre Nom {
set Valeur [ExtraitInfo $Nom "Enterre"]
if { $Valeur == "" } { return 0 }
if {[regexp -nocase -- "oui" $Valeur]} {
return 1
} else {
return 0
}
}
proc Decede Nom {
Wup "Cette notion n'existe plus"
return 0
if {0 && [regexp "TROU" $Nom] \
&& [NombreDeCopainsDansBlast $Nom] < 1} {
return 1
}
set Valeur [ExtraitInfo $Nom "Decede"]
if { $Valeur == "" } { return 0 }
if {[regexp -nocase -- "oui" $Valeur]} {
return 1
} else {
return 0
}
}
proc ItsAGene Nom {
set Valeur [ExtraitInfo $Nom "CNS-Glimmer-says"]
if { $Valeur == "" } { return -1 }
if {[regexp "it's a gene" $Valeur]} {
return 1
}
if {[regexp "it's not a gene" $Valeur]} {
return 0
}
return 2
}
proc CalculeLesOverlapsDe Moi {
global LesORFsEnOverlap
if { ! [info exists LesORFsEnOverlap] } { CalculeLesORFsEnOverlap }
if { ! [info exists LesORFsEnOverlap($Moi)] } { return "" }
set Message ""
foreach Lui [set LesORFsEnOverlap($Moi)] {
set Ov [CalculeOverlapEntre $Moi et $Lui]
lappend ListeDesMessages $Ov
}
return [join $ListeDesMessages "\n"]
}
proc CalculeOverlapEntre {Moi et Lui} {
global ListeDeBoites
set MonNom [Box $Moi nom]
set MonDebut [Box $Moi debut]
set MonFin [Box $Moi fin]
set MonOrient [Box $Moi orient]
set SonNom [Box $Lui nom]
set SonDebut [Box $Lui debut]
set SonFin [Box $Lui fin]
set SonOrient [Box $Lui orient]
global OrfsAvecStop
if {[info exists OrfsAvecStop]} {
if {$MonOrient=="F"} { incr MonFin 3 }
if {$MonOrient=="R"} { incr MonDebut -3 }
if {$SonOrient=="F"} { incr SonFin 3 }
if {$SonOrient=="R"} { incr SonDebut -3 }
}
if { \
$MonDebut <= $SonDebut && \
$SonFin <= $MonFin } {
set Long [expr $SonFin - $SonDebut + 1 ]
set BeauLong [format "%4d" $Long]
set Message "Overlap: $BeauLong bases. I contain $Lui from $SonDebut to $SonFin"
return $Message
}
if { \
$SonDebut <= $MonDebut && \
$MonFin <= $SonFin } {
set Long [expr $MonFin - $MonDebut + 1 ]
set BeauLong [format "%4d" $Long]
set Message "Overlap: $BeauLong bases. I am in $Lui from $MonDebut to $MonFin"
return $Message
}
if { \
$SonDebut <= $MonDebut && \
$MonDebut <= $SonFin } {
set Long [expr $SonFin - $MonDebut + 1 ]
set BeauLong [format "%4d" $Long]
if {$MonOrient == "R"} {
set BegEnd "end in "
} else {
set BegEnd "begin in"
}
set Message "Overlap: $BeauLong bases. I $BegEnd $Lui from $MonDebut to $SonFin"
return $Message
}
if { \
$SonDebut <= $MonFin && \
$MonFin <= $SonFin } {
set Long [expr $MonFin - $SonDebut + 1 ]
set BeauLong [format "%4d" $Long]
if {$MonOrient == "F"} {
set BegEnd "end in "
} else {
set BegEnd "begin in"
}
set Message "Overlap: $BeauLong bases. I $BegEnd $Lui from $SonDebut to $MonFin"
return $Message
}
return "J'en ai rate un"
}
proc CalculeLesORFsEnOverlap {{AvecGLIMMER ""}} {
global ListeDeBoites
global LesORFsEnOverlap
if { ! [info exists ListeDeBoites] } { ChargeListeDeBoites }
if {[info exists LesORFsEnOverlap]} {unset LesORFsEnOverlap}
foreach Boite $ListeDeBoites {
set Nom [Box $Boite nom]
if {$AvecGLIMMER=="" && [regexp "GLIMMER" $Nom]} { continue }
if {[regexp "TROU" $Nom]} { continue }
if {[Fantome $Nom]} { continue }
set Debut [Box $Boite debut]
set Fin [Box $Boite fin]
set Orient [Box $Boite orient]
global OrfsAvecStop
if {[info exists OrfsAvecStop]} {
if {$Orient=="F"} { incr Fin 3 }
if {$Orient=="R"} { incr Debut -3 }
}
lappend AQuiEstCeDebut($Debut) $Nom
lappend AQuiEstCetteFin($Fin) $Nom
lappend LesDebuts $Debut
lappend LesFins $Fin
}
set LesDebutsTries [ListeSansDoublon [lsort -integer $LesDebuts]]
set LesFinsTries [ListeSansDoublon [lsort -integer $LesFins]]
for {set i 0} {$i<[llength $LesDebutsTries]} {incr i} {
set D [lindex $LesDebutsTries $i]
foreach Moi [set AQuiEstCeDebut($D)] {
foreach X [lrange $LesDebutsTries [expr $i-6] $i] {
foreach Lui [set AQuiEstCeDebut($X)] {
if { $Moi == $Lui } { continue }
if {[Box $Moi debut]==[Box $Lui debut] \
&& [Box $Moi fin]==[Box $Lui fin]\
&& [Box $Moi orient]==[Box $Lui orient]} { continue }
if { [Box $Lui fin] >= $D } {
lappend LesORFsEnOverlap($Moi) $Lui
lappend LesORFsEnOverlap($Lui) $Moi
}
}
}
}
}
foreach {Qui ValLesORFsEnOverlap} [array get LesORFsEnOverlap] {
set LesORFsEnOverlap($Qui) [ListeSansDoublon $ValLesORFsEnOverlap]
}
EspionneL [array get LesORFsEnOverlap]
Espionne fin
FaireLire "fin calcul"
return
}
proc DeletedStart Nom {
set Valeur [ExtraitInfo $Nom "DeletedStart"]
set N [IntegerApres "il manque au moins " dans $Valeur]
if {$N!=""} { set Valeur $N } else { set Valeur 0 }
if {$Valeur!=""} { return $Valeur }
Wup "For compatibility with older version where framshift were in codonstart2"
set Valeur [ExtraitInfo $Nom "CodonStart2"]
set LesFS {}
foreach Champ [split $Valeur "/"] {
if { ! [regexp "erreur de sequence" $Champ]} { continue }
lappend LesDS $Champ
}
return [join $LesDS "/"]
}
proc CodonStart Nom {
set Valeur [ExtraitInfo $Nom "CodonStart"]
Wup "To remove old frameshifts"
set LesCS {}
foreach Champ [split $Valeur "/"] {
if {[regexp "erreur de sequence" $Champ]} { continue }
lappend LesCS $Champ
}
return [join $LesCS "/"]
Wup "Je ne veux plus les vieux CodonStart1"
set Valeur2 [ExtraitInfo $Nom "CodonStart1"]
if { $Valeur1 == "" && $Valeur2 == ""} { return "" }
return "$Valeur1 / $Valeur2"
}
proc OverlapAtStart Nom {
set Ov [Overlap $Nom]
if {$Ov=="" || ! [regexp "I begin in " $Ov]} { return 0 }
set LesOvs [split $Ov "/"]
foreach Ov $LesOvs {
if { ! [regexp "I begin in " $Ov]} { continue }
set n [IntegerApres "Overlap:" dans $Ov]
return $n
}
return 0
}
proc Overlap Nom {
global RepertoireDuGenome
global MemoOverlap
if {[info exists MemoOverlap($Nom)]} { return [set MemoOverlap($Nom)] }
if {[info exists MemoOverlap("EstCharge")]} { return [ExtraitInfo $Nom "Overlap"] }
set FichierOverlap "$RepertoireDuGenome/fiches/overlap"
if {[file exists $FichierOverlap]} {
foreach Ligne [LesLignesDuFichier $FichierOverlap] {
scan $Ligne "%s" NomLu
regsub "^$NomLu " $Ligne "" Ligne
set MemoOverlap($NomLu) $Ligne
}
set MemoOverlap("EstCharge") 1
return [Overlap $Nom]
}
if { ! [OuiOuNon "Do I create the file of overlaps now ?" 0] } {
set MemoOverlap("EstCharge") 1
return [ExtraitInfo $Nom "Overlap"]
}
foreach Boite [ListeDeBoites] {
if {[regexp "GLIMMER" $Boite]} { continue }
set Moi [Box $Boite nom]
set Ov [CalculeLesOverlapsDe $Moi]
regsub -all "\n" $Ov "/" Ov
lappend Sortie "$Moi $Ov"
}
SauveLesLignes $Sortie dans $FichierOverlap
return [Overlap $Nom]
}
proc FusionneLesBornes {} {
global RepertoireDuGenome
set Ancien "$RepertoireDuGenome/fiches/bornesdespabs"
set Apport "$RepertoireDuGenome/fiches/bornesdespabsarajouter"
foreach Ligne [LesLignesDuFichier $Apport] {
scan $Ligne "%s" A
set NouvelleLigne($A) $Ligne
}
foreach Ligne [LesLignesDuFichier $Ancien] {
scan $Ligne "%s" A
if {[info exists NouvelleLigne($A)]} {
lappend Sortie [set NouvelleLigne($A)]
} else {
lappend Sortie $Ligne
}
}
set SortieTriee [lsort -command CompareLesMilieux $Sortie]
puts [join $SortieTriee "\n"]
}
proc CoupeAuBonMet {Nom PositionDuMet} {
global RepertoireDuGenome
set Debut [Box $Nom debut]
set Fin [Box $Nom fin]
set Orient [Box $Nom orient]
if {$Orient == "F"} {
set CoupeDebut $Debut
set CoupeFin [expr $PositionDuMet-1]
set NouveauDebut $PositionDuMet
set NouvelleFin $Fin
} else {
set CoupeDebut [expr $PositionDuMet+1]
set CoupeFin $Fin
set NouveauDebut $Debut
set NouvelleFin $PositionDuMet
}
set CoupeNuc [BoutADN $CoupeDebut $CoupeFin $Orient]
set LongCoupeNuc [string length $CoupeNuc]
set CoupePro [SeqNucToSeqPro $CoupeNuc]
set LongCoupePro [string length $CoupePro]
if { $LongCoupePro < 30 } {
set CoupeTxt "Cut $LongCoupePro aas $CoupePro"
} else {
set CoupeTxt "Cut $LongCoupePro aas [string range $CoupePro 0 12] to\
[string range $CoupePro [expr $LongCoupePro-13] end]"
}
set SeqNuc [BoutADN $NouveauDebut $NouvelleFin $Orient]
set SeqPro [SeqNucToSeqPro $SeqNuc]
set NUC [SequenceFormatTFA $SeqNuc "$Nom $NouveauDebut $NouvelleFin $Orient Cut $LongCoupeNuc bases" "nucbrut"]
if {[file exists "$RepertoireDuGenome/nuctfa/$Nom"]} {
file copy -force "$RepertoireDuGenome/nuctfa/$Nom" "$RepertoireDuGenome/nuctfaorig/$Nom"
}
Espionne [Sauve $NUC dans "$RepertoireDuGenome/nuctfa/$Nom"]
set TFA [SequenceFormatTFA $SeqPro "$Nom $NouveauDebut $NouvelleFin $Orient $CoupeTxt" "protbrut"]
if {[file exists "$RepertoireDuGenome/prottfa/$Nom"]} {
file copy -force "$RepertoireDuGenome/prottfa/$Nom" "$RepertoireDuGenome/prottfaorig/$Nom"
}
Espionne [Sauve $TFA dans "$RepertoireDuGenome/prottfa/$Nom"]
return "$Nom $NouveauDebut $NouvelleFin $Orient"
}
proc CoupeAuBonMetPourTous {} {
set NouvellesBornesDesPABs {}
set NouvellesBornesDesPABsSeules {}
foreach Nom [ListeDesPABs] {
set Debut [Box $Nom debut]
set Fin [Box $Nom fin]
set Orient [Box $Nom orient]
set NewCodonStart [ExtraitInfo $Nom "NewCodonStart"]
if {[regexp {^ *[A-Z] [0-9]+} $NewCodonStart]} {
scan $NewCodonStart "%s %d" AA Position
if {$Position==1} {
lappend NouvellesBornesDesPABs "$Nom $Debut $Fin $Orient"
continue
}
set SeqPro [QueLaSequenceDuFichierTFA "[RepertoireDuGenome]/prottfa/$Nom"]
set AncienneEntamme [string range $SeqPro 0 8]
set AncienStart [string index $SeqPro 0]
set AnciennePosition [expr -$Position + 1]
set Texte "=CuttedCodonStart: $AncienStart $AnciennePosition from $AncienneEntamme"
Espionne $Texte
InformeSansDemander $Nom $Texte
InformeParSuppressionDuChamp $Nom "CutCodonStart"
} else {
lappend NouvellesBornesDesPABs "$Nom $Debut $Fin $Orient"
continue
}
if { $Orient == "F" } {
set PositionAbs [expr $Debut + ($Position-1)*3]
} else {
set PositionAbs [expr $Fin - ($Position-1)*3]
}
set NomDebutFinOrient [CoupeAuBonMet $Nom $PositionAbs]
ExtraireDe $NomDebutFinOrient N D F O
Box $Nom debut $D
Box $Nom fin $F
Box $Nom orient $O
lappend NouvellesBornesDesPABsSeules $NomDebutFinOrient
lappend NouvellesBornesDesPABs $NomDebutFinOrient
}
set FichierBornes "[RepertoireDuGenome]/fiches/bornesdespabs"
Garde $FichierBornes
SauveLesLignes $NouvellesBornesDesPABs dans $FichierBornes
ChargeListeDeBoites
return $NouvellesBornesDesPABsSeules
}
proc EtendAuBonMetPourTous {} {
Wup "Uses 'CSP: M -18 issu de Met MTVFS' which is created by CreeExtendCodonStart"
Wup " creates the line 'ExtendedCodonStart: ...'"
Wup " removes the line CSP: M -18 ..."
set NouvellesBornesDesPABs {}
set NouvellesBornesDesPABsSeules {}
foreach Nom [ListeDesPABs] {
set Debut [Box $Nom debut]
set Fin [Box $Nom fin]
set Orient [Box $Nom orient]
set NewCodonStart [ExtraitInfo $Nom "CSP"]
Espionne "$Nom $NewCodonStart"
if {[regexp {^ *[A-Z] \-[0-9]+( issu de )?} $NewCodonStart Match]} {
scan $NewCodonStart "%s %d" AA Position
set SeqPro [QueLaSequenceDuFichierTFA "[RepertoireDuGenome]/prottfa/$Nom"]
set AncienneEntamme [string range $SeqPro 0 8]
set AncienStart [string index $SeqPro 0]
set AnciennePosition [expr -$Position + 1]
set Texte "=ExtendedCodonStart: $AncienStart $AnciennePosition from $AncienneEntamme"
Espionne $Texte
InformeSansDemander $Nom $Texte
Informe $Nom $Texte
set ChampASupprimer "CSP: $NewCodonStart"
regsub -all {\-} $ChampASupprimer {\-} ChampASupprimer
InformeParSuppressionDuChamp $Nom $ChampASupprimer
} else {
lappend NouvellesBornesDesPABs "$Nom $Debut $Fin $Orient"
continue
}
if { $Orient == "F" } {
set PositionAbs [expr $Debut + ($Position)*3]
} else {
set PositionAbs [expr $Fin - ($Position)*3]
}
set NomDebutFinOrient [EtendAuBonMet $Nom $PositionAbs]
ExtraireDe $NomDebutFinOrient N D F O
Box $Nom debut $D
Box $Nom fin $F
Box $Nom orient $O
lappend NouvellesBornesDesPABsSeules $NomDebutFinOrient
lappend NouvellesBornesDesPABs $NomDebutFinOrient
}
set FichierBornes "[RepertoireDuGenome]/fiches/bornesdespabs"
Garde $FichierBornes
SauveLesLignes $NouvellesBornesDesPABs dans $FichierBornes
ChargeListeDeBoites
return $NouvellesBornesDesPABsSeules
}
proc EtendAuBonMet {Nom PositionDuMet} {
global RepertoireDuGenome
set Debut [Box $Nom debut]
set Fin [Box $Nom fin]
set Orient [Box $Nom orient]
if {$Orient == "F"} {
set EtendDebut $PositionDuMet
set EtendFin [expr $Debut-1]
set NouveauDebut $PositionDuMet
set NouvelleFin $Fin
} else {
set EtendDebut [expr $Fin+1]
set EtendFin $PositionDuMet
set NouveauDebut $Debut
set NouvelleFin $PositionDuMet
}
set EtendNuc [BoutADN $EtendDebut $EtendFin $Orient]
set LongEtendNuc [string length $EtendNuc]
set EtendPro [SeqNucToSeqPro $EtendNuc]
set LongEtendPro [string length $EtendPro]
if { $LongEtendPro < 30 } {
set EtendTxt "Extend $LongEtendPro aas $EtendPro"
} else {
set EtendTxt "Extend $LongEtendPro aas [string range $EtendPro 0 12] to\
[string range $EtendPro [expr $LongEtendPro-13] end]"
}
set SeqNuc [BoutADN $NouveauDebut $NouvelleFin $Orient]
set SeqPro [SeqNucToSeqPro $SeqNuc]
set NUC [SequenceFormatTFA $SeqNuc "$Nom $NouveauDebut $NouvelleFin $Orient Extend $LongEtendNuc bases" "nucbrut"]
if {0} {
Espionne "$Nom $NouveauDebut $NouvelleFin $Orient Extend $LongEtendNuc bases"
} else {
if {[file exists "$RepertoireDuGenome/nuctfa/$Nom"]} {
file copy -force "$RepertoireDuGenome/nuctfa/$Nom" "$RepertoireDuGenome/nuctfaorig/$Nom"
}
Espionne [Sauve $NUC dans "$RepertoireDuGenome/nuctfa/$Nom"]
set TFA [SequenceFormatTFA $SeqPro "$Nom $NouveauDebut $NouvelleFin $Orient $EtendTxt" "protbrut"]
if {[file exists "$RepertoireDuGenome/prottfa/$Nom"]} {
file copy -force "$RepertoireDuGenome/prottfa/$Nom" "$RepertoireDuGenome/prottfaorig/$Nom"
}
Espionne [Sauve $TFA dans "$RepertoireDuGenome/prottfa/$Nom"]
}
return "$Nom $NouveauDebut $NouvelleFin $Orient"
}
proc CreeExtendCodonStartPourTous {} {
foreach Nom [ListeDesPABs] {
if {[Fantome $Nom]} {continue}
CreeExtendCodonStart $Nom
}
}
proc CreeExtendCodonStart Nom {
Wup "Uses 'CSP: Met de MTVFS' from the info file"
Wup " creates 'CSP: M -18 issu de Met de MTVFS"
Wup " then "
set CSP [ExtraitInfo $Nom "CSP"]
if {[regexp -nocase "^(Ok )?(Met|Leu|Val) de " $CSP Match]} {
regexp -nocase {(Met|Leu|Val)} $Match S3
set S [UT $S3]
set Seq [string toupper [StringApres $Match dans $CSP]]
set D [Box $Nom debut]
set F [Box $Nom fin]
set O [Box $Nom orient]
set ExtensionMaxAA 600
if {$O=="F"} {
set DE [expr $D-$ExtensionMaxAA*3]
set FE $F
} else {
set DE $D
set FE [expr $F+$ExtensionMaxAA*3]
}
set SeqNucEtendue [BoutADN $DE $FE $O]
set SeqProEtendue [SeqNucToSeqPro $SeqNucEtendue]
set PosAAEtendue [string first $Seq $SeqProEtendue]
if {$PosAAEtendue>0} {
set PosAA [expr -($ExtensionMaxAA-$PosAAEtendue)]
if {$S!=[string index $Seq 0]} { FaireLire "$Nom $S $PosAA issu de $CSP" }
TextePourInforme "=CSP: $S $PosAA issu de $CSP"
Informe $Nom $TextePourInforme
Espionne $TextePourInforme
return $TextePourInforme
} else {
set MessageErreur "I can't find the sequence $Seq upstream $Nom"
if {[OuiOuNon "$MessageErreur\nDo you want to see the info file ?"]} {
set OldInfo [ExtraitInfo $Nom]
Informe $Nom
if {$OldInfo!=[ExtraitInfo $Nom] \
&& [OuiOuNon "Do I use this mofification ?"]} {
return [CreeExtendCodonStart $Nom]
}
return $MessageErreur
}
}
}
}
proc CreeChangeCodonStartPourTous {} {
foreach Nom [ListeDesPABs] {
if {[Fantome $Nom]} {continue}
CreeChangeCodonStart $Nom
}
}
proc CreeChangeCodonStart Nom {
set CSP [ExtraitInfo $Nom "CSP"]
if { ! [regexp {^[MVL]} $CSP AA]} { return "" }
set PositionAA [IntegerApres $AA dans $CSP]
if {$PositionAA==""} { return "" }
if {$PositionAA==0} {
set Message "$Nom 0 que faire pour $CSP"
FaireLire $Message
return ""
}
if {$PositionAA==1} {
return ""
}
if {$PositionAA>0} {
set SeqNuc [QueLaSequenceDuFichierTFA "[RepertoireDuGenome]/nuctfa/$Nom"]
set SeqProOfNuc [SeqNucToSeqPro $SeqNuc]
set SeqPro [QueLaSequenceDuFichierTFA "[RepertoireDuGenome]/prottfa/$Nom"]
if { ! [string equal -nocase $SeqProOfNuc $SeqPro]} {
FaireLire "The translated sequence doen't correspond to prottfa/$Nom"
}
set SeqEnPos [string range $SeqPro [expr $PositionAA-1] [expr $PositionAA+8]]
if {[string index $SeqEnPos 0]!=$AA} {
set Message "$AA doesn't begin $SeqEnPos please modify the info file for $Nom\n$CSP"
FaireLire $Message
Informe $Nom
if {[OuiOuNon "Do I rerun the test ?"]} { return [CreeChangeCodonStart $Nom] }
}
set PositionD [expr ($PositionAA-1)*3]
set PositionF [expr $PositionD+2]
set Codon [string range $SeqNuc $PositionD $PositionF]
if { ! [CodonStartPossible $Codon]} {
set Message "for $Nom I'm sorry; $Codon is not a possible start codon\n$CSP\n$SeqEnPos"
FaireLire $Message
Espionne $Message
}
set OldPosRel [expr -$PositionAA + 1]
set OldAA [string index $SeqPro 0]
set TexteInfo "=CutCodonStart: The cutted start was $OldAA $OldPosRel from [string range $SeqPro 0 9] "
InformeSansDemander $Nom $TexteInfo
} else {
Espionne "Je rallonge $Nom a $AA $PositionAA car $CSP"
}
}
proc TousLesMetDuPoch {{Nom ""}} {
global ListeDeBoites
if { ! [info exists ListeDeBoites]} { ChargeListeDeBoites }
if { $Nom != ""} {
set ListeATester [lrange $ListeDeBoites [lsearch $ListeDeBoites $Nom] end]
} else {
set ListeATester $ListeDeBoites
}
foreach Boite $ListeATester {
set Nom [Box $Boite nom]
if { ! [YaPABdans $Nom]} { continue }
set Entamme [LeMetDuPoch $Nom]
while {$Entamme == "On recommence"} { set Entamme [LeMetDuPoch $Nom] }
puts "$Nom $Entamme"
}
}
proc LeMetDuPoch Nom {
global QueLesMetOK
set CS [CodonStart $Nom]
if {[regexp -nocase "ok" $CS]} {
regsub {GroupeSize [0-9]+ [0-9]+ } $CS "" CS
scan $CS "%s %d %s" MVL Position OK
if { ! [regexp -nocase {[MVL]} $MVL]} {
FaireLire "$Nom $CS Ca merde ... pas de MVL"
if {[OuiOuNon "On corrige Info ?"]} {
Informe $Nom
return "On recommence"
} else {
return "Abandon"
}
}
if { ! [regexp -nocase "ok" $OK]} {
FaireLire "$Nom $CS Ca merde ... pas de OK"
if {[OuiOuNon "On corrige Info ?"]} {
Informe $Nom
return "On recommence"
} else {
return "Abandon"
}
}
if {$Position == 1} {
return "M 1 OK ... on ne change rien"
}
set Debut [Box $Nom debut]
set Fin [Box $Nom fin]
set Orient [Box $Nom orient]
if { $Orient == "F" } {
set DebutEntamme [expr $Debut+($Position-1)*3]
set FinEntamme [expr $DebutEntamme+29]
set Position $DebutEntamme
} else {
set FinEntamme [expr $Fin-($Position-1)*3]
set DebutEntamme [expr $FinEntamme-29]
set Position $FinEntamme
}
set Entamme [BoutADN $DebutEntamme $FinEntamme $Orient]
if { ! [CodonStartPossible [string range $Entamme 0 2]]} {
FaireLire "$Nom $Entamme ca merde a l'entamme"
if {[OuiOuNon "On corrige Info ?"]} {
Informe $Nom
return "On recommence"
} else {
return "Abandon malgre OK"
}
}
return "Coupe a $Entamme en $Position"
} else {
if {[Decede $Nom]} {
return "Abandon car decede"
}
if {$QueLesMetOK || [Informe $Nom] == "" } {
return "Abandon car non OK"
} else {
return "On recommence"
}
}
}
proc YaCodonStartEnPosition {Touche {sPAB ""} {NomOuADN ""}} {
global YCSEP_sPAB YCSEP_NomOuADN
if {$sPAB==""} { set sPAB $YCSEP_sPAB }
if {$NomOuADN ==""} { set NomOuADN $YCSEP_NomOuADN }
set YCSEP_sPAB $sPAB
set YCSEP_NomOuADN $NomOuADN
regsub -all {[^\.]} [string range $sPAB 0 $Touche] "" PointsAvant
set nPoints [string length $PointsAvant]
set iStart [expr $Touche-$nPoints]
if {[EstUnPAB $NomOuADN]} {
set Nom $NomOuADN
set SeqADN [BoutADN [Box $Nom debut] [Box $Nom fin] [Box $Nom orient]]
if {$SeqADN==""} {
set FichierNucTfa [GscopeFile $Nom nuctfa]
if {[FileAbsent $FichierNucTfa]} {
FaireLire "I can't find the nucleic sequence for $Nom"
return 0
}
set SeqADN [QueLaSequenceDuFichierTFA [GscopeFile $Nom nuctfa]]
Espionne $SeqADN
}
} else {
set SeqADN $NomOuADN
}
set dCodon [expr $iStart*3]
set fCodon [expr $dCodon+2]
set Codon [string range $SeqADN $dCodon $fCodon]
return [CodonStartPossible $Codon]
}
proc TestCodonStartEtDeletionDuMSFPourTous {{CommenceAvec ""}} {
global NePlusFaireBlastX
global NePlusFaireAligne3P
global InformeSansDemander
global RepertoireDuGenome
set NePlusFaireBlastX 1
set NePlusFaireAligne3P 1
set InformeSansDemander 1
set EtudieMSFPourTous 1
set OnAttend 0
if {$CommenceAvec!=""} { set OnAttend 1 }
foreach Nom [ListeDesPABs] {
if {$OnAttend && $Nom!=$CommenceAvec} { continue }
set OnAttend 0
TestCodonStartEtDeletionDuMSF $Nom "TestPourTous"
}
set InformeSansDemander 0
CreeStartCodonSummary "Replace"
}
proc TestCodonStartEtDeletionDuMSF {FichierMSF {QueFaire "AfficheToujours"} {Nom ""} {ADN ""}} {
global RepertoireDuGenome
global PositionUltimeDuCodonStart
Wup "It works for stand alone FichierMSF ... then it needs Nom (name of Query) and ADN (its ADN sequence)"
if { ! [info exists PositionUltimeDuCodonStart]} { set PositionUltimeDuCodonStart 400 }
if {[YaPABenDebutDe $FichierMSF]} {
set FichierMSF "$RepertoireDuGenome/msf/$FichierMSF"
}
if {[regexp {^TROU[0-9]+[A-F]$} $FichierMSF]} {
set FichierMSF "$RepertoireDuGenome/trousclustalw/$FichierMSF"
}
if { ! [file exists $FichierMSF]} { return "Clustalw inexistant" }
set PL [PremiereLigneDuFichier $FichierMSF]
if {[regexp "Clustalw inutile" $PL] || [regexp "NoSequence" $PL]} {
return "Clustalw inutile"
}
if {$ADN==""} {
set Nom [file tail $FichierMSF]
set NomOuADN $Nom
set Calculate ""
} else {
set Nom $Nom
set NomOuADN [string toupper $ADN]
set Calculate "ToCalculate"
}
set NombreDeSequences [DecortiqueUnMSF $FichierMSF LesSequencesDansLOrdre Sequences]
Espionne "$FichierMSF $NombreDeSequences"
if {$NombreDeSequences < 2} { return "No other sequence available" }
if {[regexp "/Ms" [RepertoireDuGenome]] && [OuiOuNonMemo "Do I take all sequences in one cluster"]} {
set LesSequencesDuGroupe $LesSequencesDansLOrdre
} else {
set LesSequencesDuGroupe [LesAccessDuGroupe $FichierMSF $Nom $LesSequencesDansLOrdre $Calculate]
Espionne $LesSequencesDuGroupe
}
if {[llength $LesSequencesDuGroupe] > 1} {
set LesSequencesDansLOrdre $LesSequencesDuGroupe
}
set LesRetenues {}
foreach NomSeq $LesSequencesDansLOrdre {
if {[EstUnAccessPDB $NomSeq]} { continue }
lappend LesRetenues $NomSeq
}
if {[llength $LesRetenues] < 2} { return "Not enough sequence available" }
set LesSequencesDansLOrdre $LesRetenues
foreach NomSeq $LesSequencesDansLOrdre {
Espionne "NS $NomSeq"
set Seq [string toupper [set Sequences($NomSeq)]]
if {[regexp "TROU" $Seq]} {
set cDebut [string range [string trim $Seq "."] 0 0]
set Debut($NomSeq) [string first $cDebut $Seq]
} else {
set iM [string first "M" "$Seq M"]
set iL [string first "L" "$Seq L"]
set iV [string first "V" "$Seq V"]
set Debut($NomSeq) [Mini $iM [Mini $iL $iV]]
}
set cFin [string range [string trim $Seq "."] end end]
set Fin($NomSeq) [string last $cFin $Seq]
}
foreach NomSeq $LesSequencesDansLOrdre {
set BeauAccess [format "%-12s" $NomSeq]
lappend LaPage "$BeauAccess [set Sequences($NomSeq)]"
}
set Page [join $LaPage "\n"]
set Remarque ""
set YaMieux 0
set LesCandidats {}
if { ! [info exists Sequences($Nom)]} { return "" }
set dPAB [set Debut($Nom)]
set sPAB [string toupper [set Sequences($Nom)]]
set TailleDuGroupe 0
foreach NomSeq $LesSequencesDansLOrdre {
if {$NomSeq==$Nom} { continue }
Espionne $NomSeq
incr TailleDuGroupe
set dAutre [set Debut($NomSeq)]
if { $dPAB > $dAutre } { continue }
set LesTouches {}
foreach Ecart {-1 0 1} {
if { $dPAB > [expr $dAutre+$Ecart] } { continue }
if {[regexp -nocase {[MLV]} [string index $sPAB [expr $dAutre+$Ecart]] Start] } {
lappend LesTouches [expr $dAutre+$Ecart] $Ecart
}
}
if {$LesTouches=={}} { continue }
foreach {Touche Ecart} $LesTouches {
if { ! [YaCodonStartEnPosition $Touche $sPAB $NomOuADN]} { continue }
if { $Ecart != 0 && [YaCodonStartEnPosition [expr $Touche-$Ecart]]} { continue }
set Zone [string range $sPAB $dPAB $Touche]
regsub -all -nocase {[^A-Z]} $Zone "" Zone
set Position [expr [string length $Zone]]
set Start [string index $Zone end]
if {$Position>$PositionUltimeDuCodonStart} { break }
lappend LesCandidats "$Position $Start $NomSeq"
incr YaMieux 1
}
}
if { $LesCandidats != {} } {
set LesCandidats [lsort -command CompareLesIntegersEnDebut $LesCandidats]
set OldPosition -1
set Remarque "\n=CodonStart: GroupSize $TailleDuGroupe $NombreDeSequences"
foreach PMS $LesCandidats {
scan $PMS "%d %s %s" Position Start Nomseq
if {$Position != $OldPosition} {
append Remarque " $Start $Position $Nomseq"
} else {
append Remarque "/$Nomseq"
}
set OldPosition $Position
}
}
set StartNom [string range $sPAB $dPAB $dPAB]
set iNom [lsearch -exact $LesSequencesDansLOrdre $Nom]
foreach NomSeq [lrange $LesSequencesDansLOrdre [expr $iNom-4] [expr $iNom+4]] {
if {[string equal -nocase $NomSeq [Narcisse $Nom]]} { continue }
lappend ListeDesDebuts [set Debut($NomSeq)]
lappend ListeDesFins [set Fin($NomSeq)]
}
set ListeDesDebutsTries [lsort -decreasing -integer $ListeDesDebuts]
set Prems [lindex $ListeDesDebutsTries 0]
if {[llength $ListeDesDebutsTries]>1} {
set Deuss [lindex $ListeDesDebutsTries 1]
} else {
set Deuss $Prems
}
set Derns [lindex $ListeDesDebutsTries end]
set Manque [expr ($Prems-$Deuss)]
set MaxManque [expr ($Prems-$Derns)]
if { [expr $Manque > 10] && [set Debut($Nom)] == $Prems } {
set DebutADN [Box $Nom debut]
set FinADN [Box $Nom fin]
set Orient [Box $Nom orient]
if { $Orient == "F" } {
set DebutBlastX [expr $DebutADN-($MaxManque*3)]
set FinBlastX [expr $DebutADN-1]
set EstLance [BlastXdeADN $Nom $DebutBlastX $FinBlastX]
set EstLanceAligne3P [Aligne3PdeADN $Nom \
"Changer" $DebutBlastX $FinBlastX \
"Laisser" $DebutADN $FinADN \
$Orient]
} else {
set DebutBlastX [expr $FinADN+1]
set FinBlastX [expr $FinADN+($MaxManque*3)]
set EstLance [BlastXdeADN $Nom $DebutBlastX $FinBlastX]
set EstLanceAligne3P [Aligne3PdeADN $Nom \
"Changer" $DebutBlastX $FinBlastX \
"Laisser" $DebutADN $FinADN \
$Orient]
}
incr YaMieux 10
append Remarque "\n=DeletedStart: je crois deviner une erreur de sequence, il manque au moins $Manque AA. BlastX $EstLance."
}
set ListeDesFinsTries [lsort -increasing -integer $ListeDesFins]
set Prems [lindex $ListeDesFinsTries 0]
if {[llength $ListeDesDebutsTries]>1} {
set Deuss [lindex $ListeDesDebutsTries 1]
} else {
set Deuss $Prems
}
set Derns [lindex $ListeDesFinsTries end]
set Manque [expr ($Deuss-$Prems)]
set MaxManque [expr ($Derns-$Prems)]
Warne "$Nom [set Fin($Nom)] $Prems $Deuss $Manque"
if { [expr $Manque > 10] && [set Fin($Nom)] == $Prems } {
set DebutADN [Box $Nom debut]
set FinADN [Box $Nom fin]
set Orient [Box $Nom orient]
if { $Orient == "R" } {
set DebutBlastX [expr $DebutADN-($MaxManque*3)]
set FinBlastX [expr $DebutADN-1]
set EstLance [BlastXdeADN $Nom $DebutBlastX $FinBlastX]
set EstLanceAligne3P [Aligne3PdeADN $Nom \
"Laisser" $DebutADN $FinADN \
"Changer" $DebutBlastX $FinBlastX \
$Orient]
} else {
set DebutBlastX [expr $FinADN+1]
set FinBlastX [expr $FinADN+($MaxManque*3)]
set EstLance [BlastXdeADN $Nom $DebutBlastX $FinBlastX]
set EstLanceAligne3P [Aligne3PdeADN $Nom \
"Laisser" $DebutADN $FinADN \
"Changer" $DebutBlastX $FinBlastX \
$Orient]
}
incr YaMieux 100
append Remarque "\n=DeletedStop: je crois deviner une erreur de sequence, il manque au moins $Manque AA. BlastX $EstLance."
}
if { $QueFaire == "RetourneRemarque"} {
return $Remarque
}
Espionne "Remarque $YaMieux\n$Remarque"
if { $QueFaire == "TestPourTous" && $YaMieux > 0 } {
Informe $Nom $Remarque
return
}
if { $QueFaire == "AfficheToujours" || $QueFaire == "AfficheSilFaut" && $YaMieux > 0 } {
if { ! $YaMieux } { set Remarque "\n=CodonStart: GroupSize $TailleDuGroupe $NombreDeSequences $StartNom 1" }
set Fenetre [AfficheVariable "$Page$Remarque" "AvecCorrInfoGrandeLargeur" $Nom ]
if {[info exists LesCandidats]} {
Illumine $Nom $Fenetre
foreach Candidat $LesCandidats {
scan $Candidat "%d %s %s" Position Start NomSeq
Illumine $NomSeq $Fenetre
}
}
return $Fenetre
}
}
proc CreePABdesTrousCitesDans FOF {
foreach Trou [LesLignesDuFichier $FOF] {
CreePAB $Trou
}
}
proc OldCreePAB Trou {
global RepertoireDuGenome
global ListeDeBoites
global ListeDesTROUs
global ADN TDN RAC
if { ! [info exists ListeDeBoites]} { ChargeListeDeBoites }
if { ! [info exists ListeDesTROUs]} { ChargeLesTROUs }
if { ! [info exists ADN]} { ChargeADNetTDNetRAC }
set LesMets [ExtraitInfo $Trou "CreePAB2"]
if {[llength $LesMets] == 0} { return "" }
scan [string range $Trou 4 7] "%d" n
foreach sMet [split $LesMets "/"] {
set Debut [Box $Trou debut]
set Fin [Box $Trou fin]
set Orient [Box $Trou orient]
puts "$Trou $Debut $Fin $Orient"
while {1} {
set NomPAB [format "%s%4.4d" [PreFixe] $n]
if {[Box $NomPAB nom] == ""} { break }
if {[file exists "$RepertoireDuGenome/gcgs/$NomPAB"]} {
if {[OuiOuNon "J'ecrase $NomPAB, si non je passe a +1000."]} {
break
}
}
incr n 1000
if { $n > 9999 } {incr n -2500}
}
regsub {[^A-Za-z\-]} $sMet "" Met
if {[regexp {^\-} $Met]} {
regsub {[^A-Za-z]} $sMet "" Met
if {$Orient == "F"} {
set D [expr $Debut-3]
set F [expr $D + [string length $Met]*3 - 1]
set AntiSens -3
} else {
set F [expr $Fin+3]
set D [expr $F - [string length $Met]*3 + 1]
set AntiSens 3
}
while {1} {
set SeqNuc [BoutADN $D $F $Orient]
set SeqPro [SeqNucToSeqPro $SeqNuc]
if {[regexp {\*} $SeqPro]} {
FaireLire "Je ne trouve pas $Met devant $Trou."
break
}
if {$Met == $SeqPro} { break }
incr D $AntiSens
incr F $AntiSens
}
if {$Orient == "F"} {
set Debut $D
} else {
set Fin $F
}
set SeqNuc [BoutADN $Debut $Fin $Orient]
set SeqPro [SeqNucToSeqPro $SeqNuc]
set iMet 0
Wup "Ici on a donc etendu la proteine en devant."
} else {
regsub {[^A-Za-z]} $sMet "" Met
if {$Orient == "F"} {
incr Fin 99
} else {
incr Debut -99
}
set SeqNuc [BoutADN $Debut $Fin $Orient]
set SeqPro [SeqNucToSeqPro $SeqNuc]
set iMet [string first $Met $SeqPro]
if {$iMet < 0} {
FaireLire "Je ne trouve pas $Met dans $Trou"
continue
}
set SeqPro [string range $SeqPro $iMet end]
Wup "On a trouve le bon Met a l'interieur."
}
set iFin [expr [string first "*" $SeqPro]-1]
if {$iFin < 0} {
set iFin end
}
set SeqPro [string range $SeqPro 0 $iFin]
if { $Orient == "F" } {
set NouveauDebut [expr $Debut + (3*$iMet)]
set NouvelleFin [expr $NouveauDebut + (3*[string length $SeqPro]) - 1]
} else {
set NouvelleFin [expr $Fin - (3*$iMet)]
set NouveauDebut [expr $NouvelleFin - (3*[string length $SeqPro]) + 1]
}
set NUC [SequenceFormatTFA $SeqNuc "$NomPAB $NouveauDebut $NouvelleFin $Orient"]
Espionne [Sauve $NUC dans "$RepertoireDuGenome/nuctfa/$NomPAB"]
set TFA [SequenceFormatTFA $SeqPro "$NomPAB $NouveauDebut $NouvelleFin $Orient" "protbrut"]
Espionne [Sauve $TFA dans "$RepertoireDuGenome/prottfa/$NomPAB"]
Box $NomPAB nom $NomPAB
Box $NomPAB debut $NouveauDebut
Box $NomPAB fin $NouvelleFin
Box $NomPAB orient $Orient
if {$Orient == "F" } {
puts "$NomPAB $NouveauDebut $NouvelleFin"
} else {
puts "$NomPAB $NouvelleFin $NouveauDebut"
}
}
}
proc CreePABPourTous {} {
foreach Trou [ListeDesTROUs] {
set PABCree [CreePAB $Trou]
if {$PABCree!=""} {
Espionne $PABCree
}
}
}
proc CreePAB Trou {
Wup "uses something like 'CreePAB: de MTVRD a KRTFS' in the info file of TROU"
Wup " it replaces 'CreePAB' with 'PABcree' to avoid to do it twice."
if {[set TexteCreePAB [ExtraitInfo $Trou "CreePAB"]]==""} { return ""}
set AAsDebut ""
set AAsFin ""
if { ! [regexp {^ *de ([A-Z]+) a ([A-Z]+)} $TexteCreePAB Matche AAsDebut AAsFin]} { return "" }
set AAsDebut [string toupper $AAsDebut]
set AAsFin [string toupper $AAsFin]
set DTrou [Box $Trou debut]
set FTrou [Box $Trou fin]
if {$DTrou==""} { FaireLire "$Trou doesn't exist" ; return "" }
set Extension 99
set BonneOrient ""
foreach Orient {"F" "R"} {
set BonneFrame ""
foreach Frame {0 1 2} {
set ADNCouvrant [BoutADN [expr $DTrou-$Extension+$Frame] [expr $FTrou+$Extension+$Frame] $Orient]
set ADNCouvrant [string toupper $ADNCouvrant]
set SeqPro [SeqNucToSeqPro $ADNCouvrant]
if {[regexp -indices $AAsDebut $SeqPro IndicesDeb]} { set BonneFrame $Frame ; break }
}
if {$BonneFrame!=""} { set BonneOrient $Orient ; break }
}
if {$BonneFrame==""} {
FaireLire "I cannot find $AAsDebut in $Trou" ; return ""
}
if { ! [regexp -indices $AAsFin $SeqPro IndicesFin]} {
FaireLire "I cannot find $AAsFin in $Trou" ; return ""
}
Espionne "$SeqPro\n$AAsDebut $IndicesDeb $AAsFin $IndicesFin"
scan $IndicesDeb "%d %d" DDeb FDeb
scan $IndicesFin "%d %d" DFin FFin
set DDebNuc [expr $DDeb*3]
set FFinNuc [expr $FFin*3 + 2]
if {$BonneOrient=="F"} {
set VraiDeb [expr $DTrou - $Extension + $BonneFrame + $DDebNuc]
set VraiFin [expr $DTrou - $Extension + $BonneFrame + $FFinNuc]
} else {
set VraiDeb [expr $FTrou + $Extension + $BonneFrame - $FFinNuc]
set VraiFin [expr $FTrou + $Extension + $BonneFrame - $DDebNuc]
}
Espionne "$Trou $DTrou $FTrou $AAsDebut $AAsFin $VraiDeb $VraiFin $BonneOrient"
set Bout [BoutADN [expr $VraiDeb-3] [expr $VraiFin+3] $BonneOrient]
Espionne "$BonneOrient $BonneFrame [string range $Bout 0 9] ... [string range $Bout end-9 end]"
Espionne "[SeqNucToSeqPro [string range $Bout 0 17]] ... [SeqNucToSeqPro [string range $Bout end-17 end]]"
Espionne "$AAsDebut ... $AAsFin"
Espionne ""
regsub -all {[^0-9]} $Trou "" NumeroDuTrou
set N 3
while 1 {
set Numero "${N}$NumeroDuTrou"
set PAB "[PreFixe]$Numero"
if {[Box $PAB nom]==""} { break }
if {[OuiOuNon "During CreePAB $Trou I wanted to create $PAB\n It already exists. Do I overwrite"]} {
break
}
}
set Nom $PAB
set Debut $VraiDeb
set Fin $VraiFin
set Orient $BonneOrient
set SeqNuc [BoutADN $Debut $Fin $Orient]
set NucTFA [SequenceFormatTFA $SeqNuc "$Nom $Debut $Fin $Orient created from $Trou $AAsDebut $AAsFin"]
Sauve $NucTFA dans "[RepertoireDuGenome]/nuctfa/$Nom"
set SeqPro [SeqNucToSeqPro $SeqNuc]
set ProTFA [SequenceFormatTFA $SeqPro "$Nom $Debut $Fin $Orient created from $Trou $AAsDebut $AAsFin"]
Sauve $ProTFA dans "[RepertoireDuGenome]/prottfa/$Nom"
set NouvellesBornes "$Nom $Debut $Fin $Orient"
MiseAJourBornesDesPABs $NouvellesBornes "SansReCharge"
set ToutTexteCreePAB "CreePAB: $TexteCreePAB"
InformeParSuppressionDuChamp $Trou $ToutTexteCreePAB
regsub "CreePAB" $ToutTexteCreePAB "PABCree" TextePABCree
InformeSansDemander $Trou $TextePABCree
Box $Nom nom $Nom
Box $Nom debut $Debut
Box $Nom fin $Fin
Box $Nom orient $Orient
InformeSansDemander $Nom "DuTrou: $Trou $AAsDebut $AAsFin $BonneOrient $BonneFrame"
return $NouvellesBornes
}
proc CroqueMorts {} {
global RepertoireDuGenome
global ListeDeBoites
global InformeSansDemander
set InformeSansDemander 1
if { ! [info exists ListeDeBoites] } { ChargeListeDeBoites }
foreach Boite $ListeDeBoites {
set Nom [Box $Boite nom]
if { [ItsAGene $Nom] } { continue }
if { ! [Decede $Nom]} { continue }
set Rapport ""
foreach OrgaProche [LesOrganismesTresProches] {
append Rapport "\t[OrthologueDansTBlastN $Nom $Banque]"
}
if { ! [regexp "Orthologue" $Rapport] } {
set Message "Enterre: oui $Rapport"
Informe $Nom $Message
puts "$Nom $Message"
} else {
set Message "Vivant $Rapport"
puts "$Nom $Message"
}
}
}
proc BlastNDesTrousPourTous {{Banques ""}} {
set ListeDesTrous [ListeDesTROUs]
BlastNPourTous $Banques $ListeDesTrous "" F 1
}
proc TrousLaTotale {} {
global RepertoireDuGenome
set OldIntergenes "$RepertoireDuGenome/fiches/bornesdesintergenes"
set Concorde [expr [file exists $OldIntergenes] && \
[OuiOuNon "Do I correct numbering according to existing intergenes ?"]]
if {$Concorde} {
# Espionne "Concorde"
set KeepOldIntergenes "OldIntergenes.[pid]"
File rename $OldIntergenes $KeepOldIntergenes
}
set FichierIntergenes [CreeLeFichierBornesDesIntergenes "Replace"]
if {$Concorde} {
set LesTous [ConcordanceNumerotationDesIntergenes $KeepOldIntergenes $FichierIntergenes]
if { ! [OuiOuNon "OK to delete bad files in \nnuctfa nucembl trousblastx trouxsapns ?"]} {
FaireLire "Please recover the correct names. I'll exit."
exit
}
foreach Rep {nuctfa nucembl trousblastx trouxsapns} {
foreach Fichier [glob -nocomplain "$RepertoireDuGenome/$Rep/TROU*"] {
File delete -force $Fichier
}
}
SauveLesLignes $LesTous dans $FichierIntergenes
}
CreeLesFichiersSequencesDesTrous "Replace"
BlastXDesTROUsPourTous
CreeLesFichiersApns "trouxs"
CreeLeFichierNombreDeCopainsDansBlast
NombreDeCopainsDansBlast "Reload"
return [ListeDesTROUs]
}
proc CreeLesFichiersSequencesDesTrous {{AskToKeep "Ask"}} {
global ADN TDN RAC
global ListeDeBoites
global ListeDesTROUs
global ListeDesInterGenes
global RepertoireDuGenome
global IlFautRecreerLesFichiersSequencesDesTrous
if {$AskToKeep=="Replace"} { set AskToKeep 0 } else { set AskToKeep 1 }
set OnlyNuc 1
set FichierBornes "$RepertoireDuGenome/fiches/bornesdestrous"
if {$AskToKeep && \
[file exists $FichierBornes] && \
[OuiOuNon "Do I keep existing $FichierBornes" 0]} {
return $FichierBornes
}
if { ! [info exists ListeDesInterGenes]} { ChargeLesInterGenes }
if { ! [info exists ADN]} { ChargeADNetTDNetRAC }
set lADN [string length $ADN]
set OD(A,1) 0 ; set OD(A,2) 1 ; set OD(A,0) 2
set OD(B,1) 2 ; set OD(B,2) 0 ; set OD(B,0) 1
set OD(C,1) 1 ; set OD(C,2) 2 ; set OD(C,0) 0
set OD(D,1) 0 ; set OD(D,2) 1 ; set OD(D,0) 2
set OD(E,1) 2 ; set OD(E,2) 0 ; set OD(E,0) 1
set OD(F,1) 1 ; set OD(F,2) 2 ; set OD(F,0) 0
set OF(A,1) 2 ; set OF(A,2) 1 ; set OF(A,0) 0
set OF(B,1) 0 ; set OF(B,2) 2 ; set OF(B,0) 1
set OF(C,1) 1 ; set OF(C,2) 0 ; set OF(C,0) 2
set OF(D,1) 2 ; set OF(D,2) 1 ; set OF(D,0) 0
set OF(E,1) 0 ; set OF(E,2) 2 ; set OF(E,0) 1
set OF(F,1) 1 ; set OF(F,2) 0 ; set OF(F,0) 2
foreach InterGene $ListeDesInterGenes {
Espionne $InterGene
set NomIG [Box $InterGene nom]
set Debut [Box $InterGene debut]
set Fin [Box $InterGene fin]
set Orient [Box $InterGene orient]
regsub -nocase "INTERGENE" $NomIG "" Numero
set Nom "TROU${Numero}N"
set Entete "$Nom $Debut $Fin F"
Espionne $Entete
set Sequence [SequenceFormatTFA [BoutADN $Debut $Fin "F"] $Entete]
Sauve $Sequence dans "$RepertoireDuGenome/nuctfa/$Nom"
lappend BornesDesTrous "$Nom $Debut $Fin $Orient"
if {$OnlyNuc} { continue }
Wup "Rest is obsolete ... it creates the 6 proteins (for each frame)"
foreach Frame {A B C D E F} Orient {F F F R R R} {
set DebutFrame [expr $Debut - [set OD($Frame,[expr $Debut%3])] ]
set FinFrame [expr $Fin + [set OF($Frame,[expr $Fin%3])] ]
if { $DebutFrame < 1 } { incr DebutFrame 3}
if { $FinFrame > [expr $lADN-1] } { incr FinFrame -3}
set Nom "TROU${Numero}$Frame"
if { $IlFautRecreerLesFichiersSequencesDesTrous } {
set Entete "$Nom $DebutFrame $FinFrame $Orient"
set SeqNuc [BoutADN $DebutFrame $FinFrame $Orient]
set SeqPro [SeqNucToSeqPro $SeqNuc]
if {0 && [regexp {\*} $SeqPro]} {
set LesBonsBouts [split $SeqPro "*"]
set Long 0
foreach BonBout $LesBonsBouts {
set Long [string length $BonBout]
if { $Long > 10 } { break }
}
if { $Long <= 10 } {
Warne "Je jette $SeqPro"
continue
}
}
set TFA [SequenceFormatTFA $SeqNuc "$Entete" "nucbrut"]
Sauve $TFA dans "$RepertoireDuGenome/nuctfa/$Nom"
}
lappend BornesDesTrous "$Nom $DebutFrame $FinFrame"
}
}
SauveLesLignes $BornesDesTrous dans $FichierBornes
if {[info exists ListeDesTROUs]} { unset ListeDesTROUs }
ChargeLesTROUs
return $FichierBornes
}
proc CreeLeFichierBornesDesIntergenes {{AskToKeep "Ask"} {LongueurMinimaleDesIntergenes ""}} {
global RepertoireDuGenome
global ADN TDN RAC
global ListeDeBoites
global ListeDesTROUs
if {$LongueurMinimaleDesIntergenes==""} { set LongueurMinimaleDesIntergenes 90 }
if {$AskToKeep=="Replace"} { set AskToKeep 0 } else { set AskToKeep 1 }
set Fichier "$RepertoireDuGenome/fiches/bornesdesintergenes"
if {$AskToKeep && \
[file exists $Fichier] && \
[OuiOuNon "$Fichier already exists.\nDo I keep it?" 0]} {
return $Fichier
}
set ListeDesTROUs "BidonPourFaireCroireQuIlExisteDeja"
set LesBornesDesInterGenes {}
if { ! [info exists ListeDeBoites] } { ChargeListeDeBoites }
if { ! [info exists ADN]} { ChargeADNetTDNetRAC }
foreach Boite [ListeDeBoites] {
set Nom [Box $Boite nom]
if {[regexp "GLIMMER" $Nom]} { continue }
if { [Fantome $Nom] } { continue }
# if { [Decede $Nom] } { continue }
# if { [FiabiliteFonction $Nom] == 0 } { continue }
# if { [FiabiliteFonction $Nom] == 1 } { continue }
set Debut [Box $Boite debut]
set Fin [Box $Boite fin]
set Orient [Box $Boite orient]
lappend LesDebuts [expr $Debut*2]
lappend LesFins [expr $Fin*2+1]
}
set LeToutTrie [lsort -integer [concat $LesDebuts $LesFins]]
set Niveau 0
set i 0
set FinCourante 1
foreach X $LeToutTrie {
if {[expr $X%2 == 0]} {
set DebutCourant [expr $X/2-1]
incr Niveau 1
if { $Niveau == 1 } {
# set Debut [expr ($FinCourante/3)*3+3]
# set Fin [expr (($DebutCourant+1)/3)*3]
set Debut [expr $FinCourante+1]
set Fin [expr $DebutCourant-1]
set Long [expr $Fin-$Debut+1]
set Orient "F"
set Frame [NomDeLaFrame TROU $Orient]
if { $Long >= $LongueurMinimaleDesIntergenes } {
set Num [format "%4.4d" [incr i]]
set Nom "INTERGENE$Num"
set Boite $Nom
Box $Boite nom $Nom
Box $Boite orient $Orient
Box $Boite frame $Frame
Box $Boite debut $Debut
Box $Boite fin $Fin
Box $Boite $Long
Espionne "$Nom $Debut $Fin $Orient $Long"
lappend LesBornesDesInterGenes "$Nom $Debut $Fin $Orient $Long"
if {[info exists CompteParLong($Long)]} {
incr CompteParLong($Long)
} else {
set CompteParLong($Long) 1
}
}
}
} else {
set FinCourante [expr $X/2+1]
incr Niveau -1
}
}
foreach Long [lsort -decreasing -integer [array names CompteParLong]] {
puts "$Long [set CompteParLong($Long)]"
}
return [SauveLesLignes $LesBornesDesInterGenes dans $Fichier]
}
Index by: file name |
procedure name |
procedure call |
annotation
File generated 2022-04-05 at 12:55.