proc LesPdbDesRecepteursNucleaires {} {
NousAllonsAuBoulot "/genomics/link/ProGS/NuclearReceptor"
set LesAccessPDB [LesLignesDuFichier "nuclearbinding_list.txt"]
foreach Access $LesAccessPDB {
set Access [string trim $Access]
if {$Access==""} { continue }
set a [string tolower $Access]
set T [TextePDB $a "all"]
if {$T==""} { lappend LesAbsents $Access; continue }
Espionne [Sauve $T dans "$a.pdb"]
lappend LesPresents $a
}
set P [AfficheListe $LesPresents "AvecFetche"]
AfficheListe $LesAbsents
OnRevientDuBoulot
return $P
}
proc SpineIgbmcSite {} {
return "http://lbgi.fr/Spine"
}
proc CouleurDegradee {{Quoi ""}} {
global CouleurDegradee NombreDeCouleursDegradees IemeCouleurDegradee
if {[regexp {^[0-9]+$} $Quoi]} {
set NombreDeCouleurs $Quoi
set NombreDeCouleursDegradees $NombreDeCouleurs
set IemeCouleurDegradee $NombreDeCouleurs
return
}
set BackGround [Nuance [expr [incr IemeCouleurDegradee -1]/(1.*$NombreDeCouleursDegradees)]]
set ForeGround "black"
if {$Quoi==""} { set Quoi "BackGround" }
if {$Quoi=="BackGround"} { return "$BackGround" }
if {$Quoi=="ForeGround"} { return "$ForeGround" }
if {$Quoi=="BackFore"} { return "$BackGround $ForeGround" }
if {$Quoi=="ForeBack"} { return "$Foreground $BackGround" }
return "$BackGround $ForeGround"
}
proc SpineSummaryOnWeb {{AvecMutant ""}} {
if {$AvecMutant==""} { set AvecMutant "SansMutant" }
if {$AvecMutant=="AvecMutant"} { set AvecMutant 1 } else { set AvecMutant 0 }
if {$AvecMutant} {
set AligneMutant "left"
set TitreMutant "Mutant codes"
} else {
set AligneMutant "right"
set TitreMutant "Mutant"
}
set Titre "Gscope summary of the Structural Genomics Targets of IGBMC"
set Header ""
Html_ZeroToBody $Titre $Header
Html_Append [H_Balise $Titre "h3"]
if {$AvecMutant} {
Html_Href " ... same page without mutants" [ReferenceGscope SpineSummaryOnWeb "SansMutant"]
} else {
Html_Href " ... same page with all mutants" [ReferenceGscope SpineSummaryOnWeb "AvecMutant"]
}
set NbCol 14
CouleurDegradee $NbCol
set Liste {}
lappend Liste $NbCol
lappend Liste "border='1' cellpadding='3' cellspacing='1'"
lappend Liste ""
lappend Liste "bgcolor='[CouleurDegradee]' nowrap='nowrap'"
lappend Liste "bgcolor='[CouleurDegradee]' nowrap='nowrap'"
lappend Liste "bgcolor='[CouleurDegradee]' nowrap='nowrap' align='$AligneMutant'"
lappend Liste "bgcolor='[CouleurDegradee]' nowrap='nowrap' align='right'"
lappend Liste "bgcolor='[CouleurDegradee]' nowrap='nowrap' align='center'"
lappend Liste "bgcolor='[CouleurDegradee]' nowrap='nowrap' align='center'"
lappend Liste "bgcolor='[CouleurDegradee]' nowrap='nowrap' align='center'"
lappend Liste "bgcolor='[CouleurDegradee]' nowrap='nowrap' align='center'"
lappend Liste "bgcolor='[CouleurDegradee]' nowrap='nowrap'"
lappend Liste "bgcolor='[CouleurDegradee]' nowrap='nowrap'"
lappend Liste "bgcolor='[CouleurDegradee]' nowrap='nowrap'"
lappend Liste "bgcolor='[CouleurDegradee]' nowrap='nowrap'"
lappend Liste "bgcolor='[CouleurDegradee]' nowrap='nowrap'"
lappend Liste "bgcolor='[CouleurDegradee]' nowrap='nowrap'"
lappend Liste "Please_TH_GscopeID"
lappend Liste "Gene Name"
lappend Liste "$TitreMutant"
lappend Liste "PPCR"
lappend Liste "Accession"
lappend Liste "Link to Macsim"
lappend Liste "at EBI"
lappend Liste "Task status"
lappend Liste "Function (see more ->)"
lappend Liste "Organisms"
lappend Liste "Contact"
lappend Liste "Function"
lappend Liste "Organisms"
lappend Liste "Contact"
set Summary [SpineSummary "RetourneTexte"]
foreach Ligne [split $Summary "\n"] {
if { ! [regexp -nocase {[a-z]} $Ligne]} { continue }
ScanLaLigneSpine $Ligne X Al Ac SpOk SpTsk Owner Or
set Owner [AllToTitle $Owner]
set TexteMutant " "
if {$AvecMutant} {
set Code [CodeMutation $X]
if {$Code!=""} { set TexteMutant $Code }
} else {
if {[EstUnPABMute $X]} { continue }
set LesSitesDesMutants [LesMutantsDe $X Names]
set NombreDeMutants [llength $LesSitesDesMutants]
if {$NombreDeMutants>0} { set TexteMutant $NombreDeMutants }
}
set TextePPCR " "
set LesVPPCRs [LesVirtualPPCRsDuPGS $X]
set NbVPPCRs [llength $LesVPPCRs]
if {$NbVPPCRs>0} { set TextePPCR $NbVPPCRs }
if {[EstUnPAB $X]} {
set XRef [H_Href $X [ReferenceGscope FileMoi $X]]
set Definition [DefinitionRapide $X]
}
if {[regexp "XGS" $X]} {
set XRef $X
set Definition " "
}
set RefMacsim " "
set SpineID [SpineID $X]
if {$SpineID!=""} {
set RefMacsim [H_Href $SpineID \
"[SpineIgbmcSite]/Annotation/ShowTarget.cgi?TargetId=$SpineID"]
}
set SpineGscopeName [ExtraitInfo $X "SpineGscopeName"]
if {$SpineGscopeName!=""} {
set RefMacsim [H_Href $SpineGscopeName \
"[SpineIgbmcSite]/Annotation/ShowTarget.cgi?TargetId=$SpineGscopeName"]
}
set AcRef [H_Href $Ac [WgetzSurWeb "$Ac" "" "GetUrl"]]
if {$SpOk} {
set SpOkText "EBI"
} else {
set SpOkText " "
}
regsub -all {[\<\>]} $Or " " OrRef
regsub {^[^A-Z]+} $OrRef "" BeauOrRef
lappend Liste $XRef
lappend Liste $Al
lappend Liste $TexteMutant
lappend Liste $TextePPCR
lappend Liste $AcRef
lappend Liste $RefMacsim
lappend Liste $SpOkText
lappend Liste [NiceSpineTask $SpTsk]
lappend Liste [string range $Definition 0 20]
lappend Liste [H_Italic [string range $BeauOrRef 0 20]]
lappend Liste [string range $Owner 0 20]
lappend Liste $Definition
lappend Liste [H_Italic $OrRef]
lappend Liste $Owner
}
Html_TableFromList $Liste
Html_BodyToEnd
return [Html_Get "ZeroIt"]
}
proc DiffDesXml {} {
set Lui [ContenuDuFichier "[RepXbgs]/SesTargets.xml"]
set Moi [ContenuDuFichier "[RepXbgs]/SpineTargetsP10.xml"]
while 1 {
set SaTarget [ValeurDeLaBalise "target" Lui]
set MaTarget [ValeurDeLaBalise "target" Moi]
regsub -all " " $SaTarget "" SaTarget
regsub -all " " $MaTarget "" MaTarget
if {$SaTarget==""} { break }
foreach SaLigne [split $SaTarget "\n"] MaLigne [split $MaTarget "\n"] {
set SaLigne [string trim $SaLigne]
set MaLigne [string trim $MaLigne]
if {$SaLigne==$MaLigne} { continue }
if { ! [OuiOuNon "Show [string range $MaTarget 0 27] ?\n$SaLigne\n$MaLigne"]} { break }
AfficheVariable $SaTarget
AfficheVariable $MaTarget "AvecRetour"
break
}
}
}
proc PDBsDuXGS XGS {
global PDBsDuXGS
if {[info exists PDBsDuXGS($XGS)]} { return $PDBsDuXGS($XGS) }
if {[info exists PDBsDuXGS("EstCharge")]} { return {} }
set PDBsDuXGS("EstCharge") 1
set Fichier "[RepXbgs]/XGS_pdb.txt"
foreach Ligne [LesLignesDuFichier $Fichier] {
scan $Ligne "%s" XgsLu
set PDBs [StringSuivant "PDB =" dans $Ligne]
if {$PDBs==""} { continue }
set PDBsDuXGS($XgsLu) $PDBs
}
return [PDBsDuXGS $XGS]
}
proc NosPDBs {} {
foreach Nom [ListeDesPABs] {
set PDBs [ExtraitInfo $Nom "PDB"]
if {$PDBs==""} { continue }
foreach PDB [split $PDBs "/"] {
set PDB [string trim $PDB]
Espionne "$Nom $PDB"
set Texte [TextePDB $PDB]
if {$Texte==""} { Espionne "$Nom $PDB =============" ; continue }
continue
set Retour [AfficheVariable $Texte "AvecFormateAvecRetour" "PDB_$PDB/$Nom"]
if {[regexp -nocase "NMR" $Retour]} { Informe $Nom }
}
}
}
proc RequiredSpineTask SpTsk {
global RequiredSpineTask
if {[info exists RequiredSpineTask($SpTsk,4)]} { return [set RequiredSpineTask($SpTsk,4)] }
if {[info exists RequiredSpineTask($SpTsk,3)]} { return [set RequiredSpineTask($SpTsk,3)] }
if {[info exists RequiredSpineTask($SpTsk,2)]} { return [set RequiredSpineTask($SpTsk,2)] }
if {[info exists RequiredSpineTask($SpTsk,1)]} { return [set RequiredSpineTask($SpTsk,1)] }
if {[info exists RequiredSpineTask("EstCharge")]} { return {} }
set RequiredSpineTask("EstCharge") 1
set LesRequired(1) {}
set LesRequired(2) {}
set LesRequired(3) {}
set LesRequired(4) {}
foreach {Task Req NiceTask} [LaListeDesTasks] {
foreach C [split $Req ""] {
if {$C==0} { continue }
set RequiredSpineTask($Task,$C) $LesRequired($C)
lappend LesRequired($C) $Task
}
}
return [RequiredSpineTask $SpTsk]
}
proc VerifiePDB {} {
foreach Nom [ListeDesPABs] {
set PDB [ExtraitInfo $Nom "PDB"]
set Task [ExtraitInfo $Nom "SpineTask"]
if {$Task!="PDB"} { continue }
Espionne "$Nom $Task $PDB"
}
foreach Nom [ListeDesPABs] {
set PDB [ExtraitInfo $Nom "PDB"]
set Task [ExtraitInfo $Nom "SpineTask"]
if {$PDB==""} { continue }
Espionne "$Nom $PDB $Task"
}
}
proc CreateTargetId {GS} {
global DejaVuSpineNumber
if {$GS=="Reset"} {
if {[info exists DejaVuSpineNumber]} { unset DejaVuSpineNumber }
return ""
}
if {[EstUnPABMute $GS]} { return "Mutant" }
if {[regexp "XGS" $GS]} { regsub "XGS" $GS "" SpineNumber }
if {[regexp "PGS" $GS]} {
regsub "PGS" $GS "0" SpineNumber
set SpineNumber [string range $SpineNumber end-3 end]
}
if {[info exists DejaVuSpineNumber($SpineNumber)]} {
FaireLire "I had already the SpineNumber $SpineNumber for \n\
$DejaVuSpineNumber($SpineNumber)"
return "Already seen"
}
set DejaVuSpineNumber($SpineNumber) $GS
set TargetId "IGBMC-$SpineNumber-000"
return $TargetId
}
proc InformeSpineIDPourTous {} {
if {[PreFixe]!="PGS" && \
[OuiOuNon "Attention InformeSpineIDPourTous ne marche que pour ProGS. Je stoppe ?"]} { return }
CreateTargetId "Reset"
foreach PGS [ListeDesPABs] {
if {[EstUnPABMute $PGS]} { continue }
set ProbableSpineID [CreateTargetId $PGS]
if { ! [SpineOK $PGS]} { continue }
set NomSpine [QuestionDeScience Spine "ret GscopeID $ProbableSpineID"]
set SpineID [QuestionDeScience Spine "ret SpineID $NomSpine Full"]
if {$SpineID==""} { continue }
scan $SpineID "%s" NomDuSpineID
if {$NomDuSpineID!=$ProbableSpineID} { FaireLire "$Nom $ProbableSpineID $SpineID" }
Espionne "$PGS $SpineID $NomSpine"
InformeSansDemander $PGS "=SpineID: $SpineID"
InformeSansDemander $PGS "SpineGscopeName: $NomSpine"
}
exit
}
proc VerifieOrganismeDuPAB {} {
foreach Nom [ListeDesPABs] {
set OI [ExtraitInfo $Nom "Organism"]
set OO [OrganismeDuPAB $Nom]
if {$OI==$OO && $OI!=""} { continue }
Espionne "$Nom\n$OI\n$OO\n"
}
exit
}
proc VerifieSpineDefDesMutants {} {
foreach Nom [ListeDesPABs] {
if { ! [EstUnPABMute $Nom]} { continue }
set Def [ExtraitInfo $Nom "SpineDef"]
set Grand [GrandFrereDuMutant $Nom]
set DefGrand [ExtraitInfo "SpineDef" $Grand]
if {$Def==$DefGrand} { continue }
FaireLire "The definitions do not correspond \n\
$Nom =$Def=\nmutant of \nGrand =$DefGrand=\nPlease informe $Nom"
Informe $Nom "SpineDef: $DefGrand"
}
}
proc VerifieSpineRefDesMutants {} {
foreach Nom [ListeDesPABs] {
if { ! [EstUnPABMute $Nom]} { continue }
set Ref [ExtraitInfo $Nom "SpineRef"]
set Grand [GrandFrereDuMutant $Nom]
set RefGrand [ExtraitInfo $Grand "SpineRef"]
if {$Ref==$RefGrand} { continue }
FaireLire "The SpineRefs do not correspond \n\
$Nom =$Ref=\nmutant of \n$Grand =$RefGrand=\nPlease informe $Nom"
Informe $Nom "SpineRef: $RefGrand"
}
}
proc SpineRefParNarcisse {} {
foreach Nom [ListeDesPABs] {
set Ref [ExtraitInfo $Nom "SpineRef"]
if {$Ref!=""} { continue }
set Nar [Narcisse $Nom]
if {$Nar==""} { continue }
if {[regexp {\:} $Nar]} {
set Ref $Nar
} else {
set Ref "uniprot:$Nar"
}
Espionne "$Nom $Ref"
InformeSansDemander $Nom "SpineRef: $Ref"
}
}
proc RepXbgs {} {
return "[RepertoireDuGenome]/Xbgs"
}
proc InformeParSpinePourTous {} {
foreach Nom [ListeDesPABs] {
set Entete [EnteteDuFichierTFA "[RepertoireDuGenome]/prottfa/$Nom"]
set E $Entete
foreach Clef {SpineID SpineDef SpineRef} {
if {[set iDeb [string first "$Clef (" $E]]<0} { continue }
set iFin [string last ")" $E]
set Val [string range $E $iDeb [incr iFin -1]]
set Old [ExtraitInfo $Nom $Clef]
regsub "$Clef \\(" $Val "" Val
set Val [string trim $Val]
set Valeur($Clef) $Val
set E [string range $E 0 [incr iDeb -1]]
Espionne "$Clef $Val"
if {$Old==$Val} { continue }
if {$Old!="" && \
[OuiOuNon "For $Nom I had $Clef: \n$Old and got \n$Val\nDo I keep ?"]} {
continue
}
if {$Clef=="SpineRef"} {
InformeSansDemander $Nom "SpineRef: $Val"
}
if {$Clef=="SpineID"} {
InformeSansDemander $Nom "SpineID: $Val"
}
if {$Clef=="SpineDef"} {
InformeSansDemander $Nom "SpineDef: $Val"
}
}source /biolo/srs/setsrs.com
}
}
proc NiceSpineTask TaskCode {
global NiceSpineTask
if {[info exists NiceSpineTask($TaskCode)]} { return [set NiceSpineTask($TaskCode)] }
if {[info exists NiceSpineTask("EstCharge")]} { return $TaskCode }
set NiceSpineTask("EstCharge") 1
foreach {Code R Nice} [LaListeDesTasks] {
set NiceSpineTask($Code) $Nice
}
return [NiceSpineTask $TaskCode]
}
proc LaListeDesTasks {{Ordre ""}} {
set LaListe [list \
? 0 "Selected" \
Sele 1234 "Selected" \
PCR 123 "PCR" \
Clon 123 "Cloned" \
Expr 123 "Expressed" \
Solu 123 "Soluble" \
Puri 123 "Purified" \
ScUp 123 "Scale-up" \
InCr 2 "In crystallization" \
Crys 2 "Crystallized" \
CrDi 2 "Diffraction-quality Crystals" \
NaDi 2 "Native diffraction-data" \
PhDi 2 "Phasing diffraction-data" \
NMRa 3 "NMR Assigned" \
HSQC 3 "HSQC" \
3d 2 "Crystal Structure" \
NMR 3 "NMR Structure" \
PDB 2 "In PDB" \
MoFu 0 "Molecular Function" \
Biol 0 "Biological Process" \
Cell 0 "Cellular Component" \
STOP 4 "Work Stopped" \
Othe 0 "Other"]
if {[regexp "Reverse" $Ordre]} { return [RetourneLaListe $LaListe] }
return $LaListe
}
proc LesMemesDansPGSetXGS {} {
Wup "Recherche les target identiques dans XGS et PGS ..."
Wup "Il faut, apres, supprimer la ligne du XGS dans XGS.txt"
set Page [SpineSummary "RetourneTexte"]
foreach Ligne [split $Page "\n"] {
if { ! [regexp -nocase {[a-z]} $Ligne]} { continue }
ScanLaLigneSpine $Ligne X Al Ac SpOk SpTsk Owner Or
if {[EstUnPAB $X]} {
lappend DejaVuAl($Al) $Ligne
lappend DejaVuAc($Ac) $Ligne
continue
}
if {[regexp "XGS" $X]} {
set Vu ""
if {[info exists DejaVuAl($Al)]} {
append Vu [join $DejaVuAl($Al) "\n"]
}
if {[info exists DejaVuAc($Ac)]} {
append Vu [join $DejaVuAc($Ac) "\n"]
}
if {$Vu==""} { continue }
set Memes "$Ligne\n\n$Vu"
set R [AfficheVariable $Memes "AvecRetourGrandeLargeur"]
}
}
}
proc InformeSpineDefPourTous {} {
foreach Nom [ListeDesPABs] {
set DE [SpineDefinition $Nom]
if {$DE==""} { continue }
Espionne "$Nom $DE"
InformeSansDemander $Nom "SpineDef: $DE"
}
}
proc AfficheSpineDefinitions {} {
set Page [SpineSummary "RetourneTexte"]
foreach Ligne [split $Page "\n"] {
if { ! [regexp -nocase {[a-z]} $Ligne]} { continue }
ScanLaLigneSpine $Ligne X Al Ac SpOk SpTsk Owner Or
set DE [SpineDefinition $X]
set BelleDE [format "%-50s" $DE]
# regsub "$Or" $Ligne "$BelleDE $Or" Texte
set Texte "$Ligne $BelleDE"
lappend LeTout $Texte
}
return [AfficheVariable [join $LeTout "\n"] "" coucou]
}
proc LesDefinitionsBienParenthesees Texte {
set Niveau 0
set LesDefs {}
set Lu ""
set LesCars [split $Texte ""]
lappend LesCars "."
set DernierMis "turlututu"
foreach C $LesCars {
if {$C=="("} {
if {$Niveau==0} {
set AMettre [string trim $Lu " .;"]
if {$AMettre!=$DernierMis} { lappend LesDefs $AMettre ; set DernierMis $AMettre }
}
incr Niveau
append Lu $C
continue
}
if {$C==")"} {
incr Niveau -1
append Lu $C
continue
}
append Lu $C
if {$C==" " || $C=="." || $C==";"} {
set AMettre [string trim $Lu " .;"]
if {$AMettre!=$DernierMis} { lappend LesDefs $AMettre ; set DernierMis $AMettre }
}
}
set AMettre [string trim $Lu " .;"]
if {$AMettre!=$DernierMis} { lappend LesDefs $AMettre ; set DernierMis $AMettre }
return $LesDefs
}
proc SpineDef Nom {
return [ExtraitInfo $Nom "SpineDef:"]
}
proc SpineDefinition Nom {
return [SpineDef $Nom]
}
proc OldSpineDefinition SPI {
global SpineDefinition
if {[info exists SpineDefinition($SPI)]} { return [set SpineDefinition($SPI)] }
if {[info exists SpineDefinition("EstCharge")]} {
if {[EstUnPABMute $SPI]} {
return [SpineDefinition [GrandFrereDuMutant $SPI]]
}
return ""
}
set FichierSpineDef "[RepXbgs]/SpineDefinitions.txt"
if {[file exists $FichierSpineDef]} {
array set SpineDefinition [LesLignesDuFichier $FichierSpineDef]
set Complete 0
if {[OuiOuNon "Do You want to complete $FichierSpineDef ?"]} {
set Complete 1
} else {
set SpineDefinition("EstCharge") ""
return [SpineDefinition $SPI]
}
} else {
set Complete 0
}
set Page [SpineSummary "RetourneTexte"]
foreach Ligne [split $Page "\n"] {
if { ! [regexp -nocase {[a-z]} $Ligne]} { continue }
Espionne $Ligne
ScanLaLigneSpine $Ligne X Al Ac SpOk SpTsk Owner Or
if {$Complete && [info exists SpineDefinition($X)]} { continue }
if {[OuiOuNon "Do We stop now ?" 0]} { break }
if {$Ac=="AC_no"||$Ac=="AC_not"} {set SpineDefinition($X) "" ; continue }
set LesLignesEMBL [LaSequenceDesBanques $Ac $Ac acOk "OnVeutEMBL"]
set LesBrutDE [LeChampDesLignesEMBL $LesLignesEMBL "DE"]
if {$LesBrutDE=={}} { set SpineDefinition($X) "" ; continue }
set LesDE {}
foreach DE $LesBrutDE {
regsub "DE " $DE "" DE
lappend LesDE $DE
}
set PremDE [lindex $LesDE 0]
set ToutDE [join $LesDE " "]
Espionne "[join $LesBrutDE "\n"]\n$PremDE\n$ToutDE"
if {$ToutDE!="" && [string length $ToutDE]<50} {
set SpineDefinition($X) $ToutDE
continue
}
set LesDefBienParenth [LesDefinitionsBienParenthesees $ToutDE]
lappend LesDefBienParenth "EditByMyself"
set Bonne [ChoixParmi $LesDefBienParenth]
if {$Bonne!="" && $Bonne!="EditByMyself"} {
set SpineDefinition($X) $Bonne
continue
}
while 1 {
set BonDE [Entre $ToutDE]
if {$BonDE!=""} {
set SpineDefinition($X) $PremDE
break
}
if {[OuiOuNon "Do I use an empty string ?"]} {
set SpineDefinition($X) ""
break
}
}
}
SauveLesLignes [array get SpineDefinition] dans $FichierSpineDef
return [SpineDefinition $SPI]
}
proc ScanLaLigneSpine {Ligne {aGS ""} {aAlias ""} {aAccess ""} {aSpOk ""} {aSpTsk ""} {aOwner ""} {aOrga ""} {aPrenom ""} {aNom ""}} {
if {$aGS !=""} { upvar $aGS GS }
if {$aAlias !=""} { upvar $aAlias Alias }
if {$aAccess!=""} { upvar $aAccess Access }
if {$aSpOk !=""} { upvar $aSpOk SpOk }
if {$aSpTsk !=""} { upvar $aSpTsk SpTsk }
if {$aOwner !=""} { upvar $aOwner Owner }
if {$aOrga !=""} { upvar $aOrga Orga }
if {$aPrenom!=""} { upvar $aPrenom Prenom }
if {$aNom !=""} { upvar $aNom Nom }
scan $Ligne "%s %s %s %s %s %s %s" GS Alias Access SpOk SpTsk Prenom Nom
set Owner "$Prenom $Nom"
set Orga [string trim [StringSuivant "$Prenom $Nom" dans $Ligne]]
return $GS
}
proc HistoDesSpineTasks {{SpineOnly ""} {Action ""}} {
if {$Action==""} { set Action "Show" }
if {$SpineOnly==""} { set SpineOnly "AllToGether" }
set SpineOnly [regexp -nocase "SpineOnly" $SpineOnly]
set Page [SpineSummary "RetourneTexte"]
foreach Ligne [split $Page "\n"] {
if { ! [regexp -nocase {[a-z]} $Ligne]} { continue }
ScanLaLigneSpine $Ligne X Al Ac SpOk SpTsk Owner Or
# if {[EstUnPABMute $X]} { continue }
if { $SpineOnly && ! $SpOk } { continue }
if {$SpTsk=="?"} { set SpTsk "Sele" }
if { ! [info exists H($SpTsk)]} { set H($SpTsk) 0 }
incr H($SpTsk)
}
set Cumul 0
foreach {NiceSpTsk R SpTsk} [LaListeDesTasks "Reverse"] {
if { ! [info exists H($SpTsk)]} { continue }
incr Cumul [set H($SpTsk)]
lappend Sortie [format "%3d %s" $Cumul $NiceSpTsk]
}
set LesLignesHisto [RetourneLaListe $Sortie]
set Histo [join $LesLignesHisto "\n"]
if {$Action=="Show"} {
return [AfficheVariable $Histo "" "Our_Spine_status"]
}
return $Histo
}
proc RankOfSpineTask Task {
global RankOfSpineTask
if {[info exists RankOfSpineTask($Task)]} { return $RankOfSpineTask($Task) }
if {[info exists RankOfSpineTask("EstCharge")]} { return 0 }
set RankOfSpineTask("EstCharge") 1
set i 0
foreach {T R N} [LaListeDesTasks] {
set RankOfSpineTask($T) $i
incr i
}
return [RankOfSpineTask $Task]
}
proc SpineTaskLatest PAB {
return [lindex [SpineTaskOrdered $PAB] end]
}
proc SpineTask {PAB {Valeur ""}} {
Wup "Pour les XGS on ne passe pas par ExtraitInfo"
global SpineTask
if {$Valeur!=""} { set SpineTask($PAB) $Valeur }
if {[info exists SpineTask($PAB)]} { return [set SpineTask($PAB)] }
Wup "Fin XGS"
set Tasks [ExtraitInfo $PAB "SpineTask"]
if {$Tasks==""} { set Tasks "?" }
return $Tasks
}
proc SpineTaskOrdered {PAB} {
set Tasks [SpineTask $PAB]
if {$Tasks==""} { set Task [list "?"] }
while {[regexp {[0-9]/} $Tasks Match]} {
regsub "/" $Match "-" BonMatch
regsub -all $Match $Tasks $BonMatch Tasks
}
set LesTasksOrdonnees {}
foreach Task [split $Tasks "/"] {
set Task [string trim $Task]
scan $Task "%s" SpTsk
lappend LesTasks "[RankOfSpineTask $SpTsk] $Task"
}
set LesTasksOrdonnees {}
foreach Task [lsort -index 0 -integer $LesTasks] {
regsub {[0-9]+ } $Task "" Task
lappend LesTasksOrdonnees $Task
}
return $LesTasksOrdonnees
}
proc LesTAFs {} {
foreach F [glob "*.nuctfa"] {
regsub ".nuctfa" $F "-protein.blastx" B
set Sequence [QueLaSequenceDuFichierTFA $F]
Blaste "X" $Sequence $B "/catalog/blast/protein"
}
exit
foreach D [glob "*.dna"] {
regsub ".dna" $D "" T
if {[regexp "ec" $T]} { set Entete "$T $T Encephalitozoon cuniculi Tbp Associated Factor" }
if {[regexp "y" $T]} { set Entete "$T $T Saccharomyces cerevisiae Tbp Associated Factor" }
if {[regexp "h" $T]} { set Entete "$T $T Homo sapiens Tbp Associated Factor" }
set TFA [SequenceFormatTFA [ContenuDuFichier $D] $Entete "gcg"]
Sauve $TFA dans "$T.nuctfa"
}
exit
}
proc OrganismeDesXGSs {} {
set FichierXGS "[RepXbgs]/XGS.txt"
set LesNouveauxXGSs {}
foreach Ligne [LesLignesDuFichier $FichierXGS] {
if { ! [regexp -nocase {[a-z]} $Ligne]} { lappend LesNouveauxXGSs $Ligne ; continue }
ScanLaLigneSpine $Ligne X Al Ac SpOk SpTsk Owner Or
if {[regexp "AC_" $Ac]} {
lappend LesNouveauxXGSs $Ligne
continue
}
set OXs [TaxIdDuAccess $Ac]
if {$OXs==""} {
lappend LesNouveauxXGSs $Ligne
continue
}
set TextOr "<"
set LesTextOrs {}
foreach OX [split $OXs " "] {
lappend LesTextOrs "<[Tax $OX Name]>"
}
set BonOr "$OXs <[join $LesTextOrs "+"]>"
if { ! [regexp "NoOrganism" $Or]} {
if {$Or==$BonOr || ! [OuiOuNon "Do I replace \n$Or\n with\n $BonOr ?"]} {
lappend LesNouveauxXGSs $Ligne
continue
}
}
set NouvelleLigne [format "%s %-15s %-15s %1s %-4s %-20s %s" $X $Al $Ac $SpOk $SpTsk "$Pr $No" $BonOr]
lappend LesNouveauxXGSs $NouvelleLigne
}
SauveLesLignes $LesNouveauxXGSs dans $FichierXGS
}
proc AfficheLesSpines {Page {KO ""}} {
foreach Ligne [split $Page "\n"] {
if { ! [regexp -nocase {[a-z]} $Ligne]} { continue }
ScanLaLigneSpine $Ligne X Al Ac SpOk
if {$SpOk} {
lappend LesBons $Ligne
} else {
lappend LesMauvais $Ligne
}
}
if {$KO=="KO"} {
set NewPage [join $LesMauvais "\n"]
} else {
set NewPage [join $LesBons "\n"]
}
return [AfficheVariable $NewPage]
}
proc InformePDB {} {
set Fichier "[RepXbgs]/PdbOfNuclearReceptorsIGBMC.list"
foreach Ligne [LesLignesDuFichier $Fichier] {
set Alias ""
scan $Ligne "%s %s" aPDB Alias
if {$Alias==""} { continue }
lappend LesPdbsDuAlias($Alias) $aPDB
}
set LesPDBsOk {}
foreach PAB [ListeDesPABs] {
set Alias [Alias $PAB]
if { ! [info exists LesPdbsDuAlias($Alias)]} { continue }
foreach aPDB [set LesPdbsDuAlias($Alias)] {
set FichierBlast "[RepertoireDuGenome]/blastp/$PAB"
if { ! [file exists $FichierBlast]} { FaireLire "no blastp for $PAB" ; continue }
set Fen [AfficheFichier $FichierBlast "AvecSegAlignement"]
Illumine $aPDB $Fen
set Info [Informe $PAB "PDB: $aPDB"]
if {$Info==""} { continue }
lappend LesPDBsOk "$PAB $Alias $aPDB"
}
}
SauveLesLignes $LesPDBsOk dans LesPDBsOk
return $LesPDBsOk
}
proc UnPetitNomPourNosPdbs {} {
set Fichier "[RepXbgs]/PdbOfNuclearReceptorsIGBMC.list"
set OldAlias ""
foreach Ligne [LesLignesDuFichier $Fichier] {
set Alias ""
scan $Ligne "%s %s" aPDB Alias
if {$Alias==""} { set Alias $OldAlias }
set TextePDB [TextePDB $aPDB]
if {$TextePDB==""} { continue }
set Id [AfficheVariable $TextePDB]
update idletask
set NewAlias [Entre $Alias]
set OldAlias $NewAlias
lappend LesBons "$aPDB $NewAlias"
destroy $Id
}
SauveLesLignes $LesBons dans $Fichier
return $LesBons
}
proc NosPdbofNuclearReceptors {} {
foreach Nom [People LaListeDes Noms] {
regsub -all {\-} $Nom "|" Nom
lappend NosNoms $Nom
}
set Nous [join $NosNoms "|"]
Espionne $Nous
set NosPdbs {}
foreach aPDB [LesLignesDuFichier "[RepXbgs]/PdbOfNuclearReceptors.list"] {
set aPDB [string tolower $aPDB]
set TextePDB [TextePDB $aPDB "AUTHOR"]
if {$TextePDB==""} { continue }
if {[regexp $Nous $TextePDB Match]} {
if { ! [OuiOuNon "J'accepte $Match"]} { continue }
set OK [AfficheVariable [TextePDB $aPDB] "AvecRetour"]
if {$OK==""} { continue }
lappend NosPdbs $aPDB
}
}
Espionne [SauveLesLignes $NosPdbs dans PdbofNuclearReceptorsIGBMC.list]
return $NosPdbs
}
proc SpineOK {PAB {Alias ""} {Valeur ""}} {
global SpineOK
if {$Valeur!=""} {
set SpineOK($PAB) $Valeur
set SpineOK($Alias) $Valeur
return $Valeur
}
if {$Alias==""} { set Alias "AAAAAAAAAAAAAAAAAAA" }
if {[info exists SpineOK($PAB)]} { return [set SpineOK($PAB)] }
if {[info exists SpineOK($Alias)]} { return [set SpineOK($Alias)] }
if {[info exists SpineOK("EstCharge")]} { return 1 }
set SpineOK("EstCharge") 1
foreach PABlu [ListeDesPABs] {
set SpOK [ExtraitInfo $PABlu "SpineOK"]
if {[regexp -nocase "No" $SpOK] || [EstUnPABMute $PABlu]} {
set SpineOK($PABlu) 0
} else {
set SpineOK($PABlu) 1
}
set AliasLu [Alias $PABlu]
}
return [SpineOK $PAB $Alias]
Wup "La suite est obsolete"
foreach Ligne [LesLignesDuFichier "[RepXbgs]/ListeComplementaire.txt"] {
if { ! [regexp -nocase {[a-z]} $Ligne]} { continue }
scan $Ligne "%s" Alias
set SpineOK($Alias) [regexp {\*} $Ligne]
}
if {[info exists SpineOK($AliasLu)] && [set SpineOK($AliasLu)]!=[set SpineOK($PABlu)]} {
FaireLire "$PABlu [set SpineOK($PABlu)] [set SpineOK($AliasLu)] $AliasLu"
}
}
proc SequencePourSpine {PAB Access} {
if {[EstUnPAB $PAB]} {
set Fichier "[RepertoireDuGenome]/prottfa/$PAB"
if { ! [file exists $Fichier]} { return "" }
return [QueLaSequenceDuFichierTFA $Fichier]
}
if {[regexp "AC_no" $Access]} { return "" }
set lEMBL [LaSequenceDesBanques $Access $Access aAccessOK "OnVeutEMBL"]
if {$lEMBL=={}} { return "" }
set TFA [SequenceFormatTFA [join $lEMBL "\n"] "$Access"]
set Seq [QueLaSequenceDuTexteTFA $TFA]
return $Seq
}
proc OrganismePourSpine Organisme {
return [OrganismeFormate $Organisme "Name"]
Wup "reste obsolete"
if {[regexp "<" $Organisme]} {
set Texte [StringSuivant "<" dans $Organisme]
regsub -all { +[0-9]+ *$} $Texte "" Texte
regsub -all {[<>]} $Texte "" Bon
return $Bon
}
if {[regexp {^[0-9]+} $Organisme Match]} {
set Bon [Tax $Match]
return $Bon
}
return $Organisme
}
proc CreateSpineXML {{Selection ""} {FichierSpineXML ""}} {
CreateTargetId "Reset"
if {$FichierSpineXML==""} {
set FichierSpineXML "[RepXbgs]/SpineTargetsP10.xml"
}
if {$Selection=="Show"} {
return [AfficheFichier $FichierSpineXML]
}
if {$Selection==""} {
set Selection [SpineSummary "RetourneTexte"]
}
set LesLignes [split $Selection "\n"]
lappend lXML ""
lappend lXML ""
lappend lXML ""
foreach Ligne $LesLignes {
if { ! [regexp -nocase {[a-z]} $Ligne]} { continue }
OneToSpine $Ligne lXML
}
lappend lXML ""
if {$Selection=="Show"} {
return [AfficheVariable [join $lXML "\n"] "" "XML_for_Spine"]
}
if { ! [OuiOuNon "Ok to create a new $FichierSpineXML"]} { return "" }
regsub ".xml$" $FichierSpineXML "[Date].xml" FichierSpineXMLDate
SauveLesLignes $lXML dans $FichierSpineXML
return [SauveLesLignes $lXML dans $FichierSpineXMLDate]
}
proc OneToSpine {Ligne alXML} {
upvar $alXML lXML
set [SpineIgbmcSite]
ScanLaLigneSpine $Ligne GS Alias Access SpOk SpTsk Owner Organisme
if { ! $SpOk } { return }
if {[regexp "^AC_no" $Access]} { set Access "" }
set TargetId [CreateTargetId $GS]
if {[regexp "^Mutant" $TargetId]} { return "" }
if {[regexp "^Already seen" $TargetId]} { return "" }
set WP "WP10.10 Human targets I - cancer"
set Sequence [SequencePourSpine $GS $Access]
set SpiDef [SpineDefinition $GS]
set ProteineName "$Alias $SpiDef"
set SpeciesName [OrganismePourSpine $Organisme]
set DataBase "UniProt"
set Accession $Access
set LesSpineTask [SpineTaskOrdered $GS]
set Date "2004-09-10"
set LabID "P10"
set Laboratoire "Departement de Biologie et Genomique Structurales de l'IGBMC 1, rue Laurent Fries 67404 Illkirch Strasbourg France"
set URL "[SpineIgbmcSite]/index.html"
set Contact "Dino.Moras@igbmc.u-strasbg.fr"
set Remarks ""
set AnnotationUrl "[SpineIgbmcSite]/Annotation/ShowTarget.cgi?TargetId=$TargetId"
Espionne "$GS $Alias $Access $SpeciesName"
if {[EstUnPAB $GS]} {
set PDBs [ExtraitInfo $GS "PDB"]
} else {
set PDBs [PDBsDuXGS $GS]
}
set LesPBDs {}
foreach PDB [split $PDBs "/"] {
lappend LesPBDs [string trim $PDB]
}
lappend lXML " "
lappend lXML " $TargetId"
lappend lXML " $WP"
lappend lXML " $Sequence"
lappend lXML " $ProteineName"
lappend lXML " $SpeciesName"
lappend lXML " "
lappend lXML " $DataBase"
lappend lXML " "
lappend lXML " $Accession"
lappend lXML " "
foreach PDB $LesPBDs {
lappend lXML " "
lappend lXML " PDB"
lappend lXML " $PDB"
lappend lXML " "
}
foreach TaskAndDate $LesSpineTask {
set TaskMereDate $Date
scan $TaskAndDate "%s %s" TaskMere TaskMereDate
set LesRequired [RequiredSpineTask $TaskMere]
lappend LesRequired $TaskAndDate
foreach TaskLue $LesRequired {
scan $TaskLue "%s" Task
if {[info exists DejaVu($Task)]} { continue }
set DejaVu($Task) 1
set TaskDate $TaskMereDate
set NiceTask [NiceSpineTask $Task]
lappend lXML " "
lappend lXML " $NiceTask"
lappend lXML " $TaskDate"
lappend lXML " $LabID"
lappend lXML " $Laboratoire"
lappend lXML " SPINE"
lappend lXML " $URL"
lappend lXML " $Contact"
lappend lXML " $Remarks"
lappend lXML " "
}
}
lappend lXML " $AnnotationUrl"
lappend lXML " "
return
}
proc RefreshFichierXGS aNouveauXGS {
upvar $aNouveauXGS NouveauXGS
set FichierXGS "[RepXbgs]/XGS.txt"
set LesNouveauxXGSs {}
foreach Ligne [LesLignesDuFichier $FichierXGS] {
if { ! [regexp -nocase {[a-z]} $Ligne]} { lappend LesNouveauxXGSs $Ligne ; continue }
ScanLaLigneSpine $Ligne XGS
if {[info exists NouveauXGS($XGS)]} {
set NouvelleLigne [set NouveauXGS($XGS)]
regsub { [01]$} $Ligne "" Ligne]
lappend LesNouveauxXGSs $NouvelleLigne
} else {
lappend LesNouveauxXGSs $Ligne
}
}
if {$LesNouveauxXGSs=={}} { return "" }
return [SauveLesLignes $LesNouveauxXGSs dans $FichierXGS]
}
proc XGSPourOwner Selection {
if {[regexp "\n" $Selection]} {
foreach Ligne [split $Selection "\n"] {
XGSPourOwner $Ligne
}
return
}
if { ! [regexp -nocase {[a-z]} $Selection]} { return "" }
ScanLaLigneSpine $Selection XGS
set LigneCorrigee [Entre $Selection]
if {$LigneCorrigee==""} { return "" }
ScanLaLigneSpine $LigneCorrigee X Al Ac SpOk SpTsk Owner Or
set NouvelleLigne [format "%s %-15s %-15s %1s %-4s %-20s %s" $X $Al $Ac $SpOk $SpTsk $Owner $Or]
set NouveauXGS($XGS) $NouvelleLigne
return [RefreshFichierXGS NouveauXGS]
}
proc MemeOwner Selection {
set LesLignes [split $Selection "\n"]
foreach Ligne $LesLignes {
if { ! [regexp -nocase {[a-z]} $Ligne]} { continue }
ScanLaLigneSpine $Ligne PAB
if {[EstUnPAB $PAB]} {
set Owner [ExtraitInfo $PAB "Owner"]
} else {
ScanLaLigneSpine $Ligne P Al Ac SpOk SpTsk Owner
}
set OwnerDeLaLigne($Ligne) $Owner
}
lappend LesLignes "NewOwner"
set BonneLigne [ChoixParmi $LesLignes]
if {$BonneLigne=="NewOwner"} {
set Nouveau [ChoixParmi [People LaListeDes PrenomNom]]
} else {
if {$BonneLigne==""} {
set Nouveau ""
} else {
set Nouveau [set OwnerDeLaLigne($BonneLigne)]
}
}
Espionne $Nouveau
if {$Nouveau==""} { set Nouveau [Entre "No OWNER"] }
foreach Ligne $LesLignes {
scan $Ligne "%s" PAB
if {[regexp "^XGS" $PAB]} {
ScanLaLigneSpine $Ligne X Al Ac SpOk SpTsk Owner
set NouvelleLigne [format "%s %-15s %-15s %1s %-4s %-20s %s" $X $Al $Ac $SPOk $SpTsk $Nouveau $Or]
Espionne "NL $NouvelleLigne"
set NouveauXGS($PAB) $NouvelleLigne
}
if { ! [EstUnPAB $PAB]} { continue }
InformeSansDemander $PAB "=Owner: $Nouveau"
}
if { ! [info exists NouveauXGS]} { return }
return [RefreshFichierXGS NouveauXGS]
}
proc SpineSummary {{Action ""}} {
global FenSpineSummary
if {$Action==""} { set Action "RetourneTexte" }
if {$Action=="Show" && [info exists FenSpineSummary] && [winfo exists $FenSpineSummary]} {
after 1000 destroy $FenSpineSummary
unset FenSpineSummary
}
foreach PAB [ListeDesPABs] {
set Narcisse [Narcisse $PAB]
if {$Narcisse==""} { set Narcisse "AC_no" }
set Alias [Alias $PAB]
set Owner [ExtraitInfo $PAB "Owner"]
set Organisme [OrganismeDuPAB $PAB]
set DejaVu($Alias) $PAB
set SpineOK [SpineOK $PAB $Alias]
set SpineTaskAvecDate [SpineTaskLatest $PAB]
scan $SpineTaskAvecDate "%s" SpineTask
lappend LaListe [format "%-7s %-20s %-15s %1s %-4s %-30s %s" \
$PAB $Alias $Narcisse $SpineOK $SpineTask $Owner $Organisme]
}
set FichierXGS "[RepXbgs]/XGS.txt"
set LesXGSs [LesLignesDuFichier $FichierXGS]
set LesBeauxXGSs {}
foreach Ligne $LesXGSs {
if { ! [regexp -nocase {[a-z]} $Ligne]} { continue }
ScanLaLigneSpine $Ligne XGS Al Ac SpOk SpTsk Owner Or
SpineOK $XGS $Al $SpOk
SpineTask $XGS $SpTsk
lappend LesBeauxXGSs [format "%-7s %-20s %-15s %1s %-4s %-30s %s" \
$XGS $Al $Ac $SpOk $SpTsk $Owner $Or]
}
# set Page "[join $LesBeauxXGSs "\n"]\n\n[join $LaListe "\n"]"
set Page "[join $LaListe "\n"]\n\n[join $LesBeauxXGSs "\n"]"
if {$Action=="RetourneTexte"} { return $Page }
set FenSpineSummary [AfficheVariable $Page "AvecXbgsGrandeLargeur" "StructuralGenomicsTargets"]
return $FenSpineSummary
}
proc PeopleOld {{Qui ""} {Quoi ""}} {
global People
if {$Qui=="" && $Quoi==""} { set Qui "LaListeDes" ; set Quoi "PrenomNom" }
if {[info exists People($Qui,$Quoi)]} { return [set People($Qui,$Quoi)] }
if {[info exists People("EstCharge")]} { return "" }
set People("EstCharge") 1
set FichierPeople "[GscopeEtc]/gscope_people.txt"
if {[file exists $FichierPeople]} {
array set People [LesLignesDuFichier $FichierPeople]
return [People $Qui $Quoi]
}
foreach Ligne [LesLignesDuFichier "/tools/wwwbio3d/People/nomprenom.txt"] {
scan $Ligne "%s %s" Nom Prenom
set IN [string range $Nom 0 2]
set IP [string range $Prenom 0 1]
set IPN "$IP$IN"
set PN "$Prenom $Nom"
set People($PN,) $IPN
if { ! [info exists People($IPN,)]} {
set People($IPN,) $PN
} else {
FaireLire "[set People($IPN,)] et $Ligne"
append People($IPN,) " or $PN"
}
lappend People(LaListeDes,Initiales) $IPN
lappend People(LaListeDes,Noms) $Nom
lappend People(LaListeDes,Prenoms) $Prenom
lappend People(LaListeDes,NomPrenom) "$Nom $Prenom"
lappend People(LaListeDes,PrenomNom) "$Prenom $Nom"
}
if {[OuiOuNon "Do I save People ?"]} {
SauveLesLignes [array get People] dans $FichierPeople
}
return [People $Qui $Quoi]
}
proc People {{Qui ""} {Quoi ""} {Quoi2 ""}} {
global People
if {$Quoi2!=""} { set Qui "${Qui}_$Quoi" ; set Quoi $Quoi2 }
if {$Qui=="" && $Quoi==""} { set Qui "LaListeDes" ; set Quoi "PrenomNom" }
if {[info exists People($Qui,$Quoi)]} { return [set People($Qui,$Quoi)] }
if {[info exists People("EstCharge")]} { return "" }
set People("EstCharge") 1
# set UPNA [HttpGetTextFromUrl "[LbgiUrl]/~ripp/cgi-bin/peopleBio3d.tcsh"]
set UPNA ""
if {$UPNA==""} {
FaireLire "people.tcl ne marche pas. Je lis le fichier directement"
foreach Ligne [LesLignesDuFichier "/tools/wwwbio3d/People/nomprenom.txt"] {
scan $Ligne "%s %s" Nom Prenom
set IN [string range $Nom 0 2]
set IP [string range $Prenom 0 1]
set IPN "$IP$IN"
set PN "$Prenom $Nom"
set People($PN,) $IPN
if { ! [info exists People($IPN,)]} {
set People($IPN,) $PN
} else {
FaireLire "[set People($IPN,)] et $Ligne"
append People($IPN,) " or $PN"
}
lappend People(LaListeDes,Initiales) $IPN
lappend People(LaListeDes,Noms) $Nom
lappend People(LaListeDes,Prenoms) $Prenom
lappend People(LaListeDes,NomPrenom) "$Nom $Prenom"
lappend People(LaListeDes,PrenomNom) "$Prenom $Nom"
}
}
foreach Ligne [split $UPNA "\n"] {
if { ! [regexp {^[^ ]+ [^ ]+ [^ ]+ [^ ]+$} $Ligne]} { continue }
scan $Ligne "%s %s %s %s" Username Prenom Nom Adresse
set IN [string range $Nom 0 2]
set IP [string range $Prenom 0 1]
set IPN "$IP$IN"
set PN "$Prenom $Nom"
set People($PN,) $IPN
if { ! [info exists People($IPN,)]} {
set People($IPN,) $PN
} else {
FaireLire "$IPN [set People($IPN,)] et $Ligne"
append People($IPN,) " or $PN"
}
set People($Username,Nom) $Nom
set People($Username,Prenom) $Prenom
set People($Username,PrenomNom) "$Prenom $Nom"
set People($Username,NomPrenom) "$Nom $Prenom"
set People($Username,Adresse) $Adresse
set People(${Prenom}_$Nom,Username) $Username
set People(${Nom}_$Prenom,Username) $Username
set People(${Prenom}_$Nom,Adresse) $Adresse
set People(${Nom}_$Prenom,Adresse) $Adresse
lappend People(LaListeDes,Initiales) $IPN
lappend People(LaListeDes,Noms) $Nom
lappend People(LaListeDes,Prenoms) $Prenom
lappend People(LaListeDes,NomPrenom) "$Nom $Prenom"
lappend People(LaListeDes,PrenomNom) "$Prenom $Nom"
lappend People(LaListeDes,Adresses) $Adresse
lappend People(LaListeDes,Usernames) $Username
}
return [People $Qui $Quoi]
}