#rR genoret_lca.tcl proc MutationMisSensProtein {{GetWhat ""}} { foreach M [MutationMTM ListAllPlease MutationsMTM-MisSens MisSens] { set F [MutationMTM $M Phenotype MisSens] set P [MutationMTM $M Predicted_protein_or_splicing_alteration MisSens] set P [string trim $P " ,"] lappend LesMisSens "$P $F" } if {[string equal -nocase $GetWhat "GetList"]} { return $LesMisSens } return [AfficheVariable [join $LesMisSens "\n"] "" "LesMisSens"] } proc MergeMTM {} { set LesHeaderRR [MutationRR ListOf Header] set LesHeaderVB [MutationVB ListOf Header] set LesLignes {} lappend LesLignes [join $LesHeaderVB ";"] foreach Pid [MutationVB ListOf Pid] { set LesV {} foreach H $LesHeaderVB { set V [MutationVB $Pid $H] lappend LesV $V } lappend LesLignes [join $LesV ";"] } foreach Pid [MutationPolyVB ListOf Pid] { Espionne $Pid set LesV {} foreach H $LesHeaderVB { set V [MutationPolyVB $Pid $H] lappend LesV $V } lappend LesLignes [join $LesV ";"] } return [SauveLesLignes $LesLignes dans "MutationMTM-20081127.csv"] exit } proc CompareMTM {} { set LesHeaderRR [MutationRR ListOf Header] set LesHeaderVB [MutationVB ListOf Header] foreach H $LesHeaderRR { foreach Pid [MutationVB ListOf Pid] { if {[MutationRR $Pid $H]!=[MutationVB $Pid $H]} { Espionne "$Pid $H [MutationRR $Pid $H]!=[MutationVB $Pid $H]" } } } foreach H $LesHeaderVB { if { [lsearch $LesHeaderRR $H] < 0 } { lappend LesNouveauxHeaders $H; continue } foreach Pid [MutationVB ListOf Pid] { if {[MutationRR $Pid $H]!=[MutationVB $Pid $H]} { Espionne "$Pid $H [MutationRR $Pid $H]!=[MutationVB $Pid $H]" } } } foreach H $LesNouveauxHeaders { set LesNouveaux {} foreach Pid [MutationVB ListOf Pid] { lappend LesNouveaux [MutationVB $Pid $H] } set LesNouveaux [lsort -unique $LesNouveaux] AfficheVariable [join $LesNouveaux "\n"] "" $H } } proc MutationRR {{Qui ""} {Quoi ""}} { global MutationRR if {$Qui==""} { set Qui "ListOf"; set Quoi "Header" } if {[info exists MutationRR($Qui,$Quoi)]} { return $MutationRR($Qui,$Quoi) } if {[info exists MutationRR("EstCharge")]} { return "" } set MutationRR("EstCharge") 1 set Rep "[HomeRipp]/GenoretWww/Collaboration/MutationsMTM" set F "$Rep/MutationsMTM.csv" if {[info exists T]} { unset T } LoadTxlWithRowsOfCells $F T 0 ";" "" "WholeLine" set MutationRR(ListOf,Header) $T(ListHeaderPlease,) set MutationRR(ListOf,Pid) $T(ListAllPlease,) foreach {C V} [array get T] { set MutationRR($C) $V } return [MutationRR $Qui $Quoi] } proc MutationVB {{Qui ""} {Quoi ""}} { global MutationVB if {$Qui==""} { set Qui "ListOf"; set Quoi "Header" } if {[info exists MutationVB($Qui,$Quoi)]} { return $MutationVB($Qui,$Quoi) } if {[info exists MutationVB("EstCharge")]} { return "" } set MutationVB("EstCharge") 1 set Rep "[HomeRipp]/GenoretWww/Collaboration/MutationsMTM" # set F "$Rep/MutationsMTMv2Poly-VBcorrigeRR.csv" set F "$Rep/MutationsMTMv2-VBcorrigeRR.csv" if {[info exists T]} { unset T } LoadTxlWithRowsOfCells $F T 0 ";" "" "WholeLine" set MutationVB(ListOf,Header) $T(ListHeaderPlease,) set MutationVB(ListOf,Pid) $T(ListAllPlease,) foreach {C V} [array get T] { set MutationVB($C) $V } return [MutationVB $Qui $Quoi] } proc MutationPolyVB {{Qui ""} {Quoi ""}} { global MutationPolyVB if {$Qui==""} { set Qui "ListOf"; set Quoi "Header" } if {[info exists MutationPolyVB($Qui,$Quoi)]} { return $MutationPolyVB($Qui,$Quoi) } if {[info exists MutationPolyVB("EstCharge")]} { return "" } set MutationPolyVB("EstCharge") 1 set Rep "[HomeRipp]/GenoretWww/Collaboration/MutationsMTM" set F "$Rep/MutationsMTMv2Poly-VBcorrigeRR.csv" if {[info exists T]} { unset T } LoadTxlWithRowsOfCells $F T 0 ";" "" "WholeLine" set MutationPolyVB(ListOf,Header) $T(ListHeaderPlease,) set MutationPolyVB(ListOf,Pid) $T(ListAllPlease,) foreach {C V} [array get T] { set MutationPolyVB($C) $V } return [MutationPolyVB $Qui $Quoi] } proc MTM1 {{Qui ""} {Quoi ""} {Deb ""} {Fin ""}} { global MTM1 if {[info exists MTM1("EstCharge")]} { if {$Qui=="" || $Qui=="show" && $Quoi==""} { set Show [string equal $Qui "show"] set QQDF [ChoixParmi [MTM1 ListOf Keys]] set O [set D [set F ""]] ScanLaListe [split $QQDF ","] Q O D F set R [MTM1 $Q $O $D $F] if {$Show} { return [AfficheVariable $R] } return $R } if {$Qui=="show"} { set What "seq" if {$Quoi=="gb"} { set What "gb" ; set Quoi "text" } set Titre [join [list $What $Quoi $Deb $Fin] "_"] return [AfficheVariable [MTM1 $What $Quoi $Deb $Fin] "AvecFormat" $Titre] } if {[info exists MTM1($Qui,$Quoi,$Deb,$Fin)] } { return $MTM1($Qui,$Quoi,$Deb,$Fin) } if {[info exists MTM1($Qui,$Quoi,$Deb)] && $Fin==""} { return $MTM1($Qui,$Quoi,$Deb) } if {[info exists MTM1($Qui,$Quoi)] && $Deb=="" && $Fin==""} { return $MTM1($Qui,$Quoi) } if {[info exists MTM1($Qui)] && $Quoi=="" && $Deb=="" && $Fin==""} { return $MTM1($Qui) } if {$Fin==""} { set Fin $Deb } if {$Qui=="seq" && $Quoi!=""} { return [string range $MTM1($Qui,$Quoi) [expr $Deb-1] [expr $Fin-1]] } return "" } set MTM1("EstCharge") 1 set FichierGene "[HomeRipp]/GenoretWww/Collaboration/MutationsMTM/MTM1gene.gb" set GB [ContenuDuFichier $FichierGene] set MTM1(gb,text) $GB set MTM1(gb,filename) $FichierGene set Access [StringApres "LOCUS" dans $GB] set MTM1(access) $Access set Definition [StringSuivant "DEFINITION " dans $GB] regsub {\n.*} $Definition "" Definition set MTM1(definition) $Definition set ZonesMrna [StringSuivant " mRNA join(" dans $GB] regsub {\).*} $ZonesMrna "" ZonesMrna regsub -all {[^0-9\.\,]} $ZonesMrna "" ZonesMrna foreach Zone [split $ZonesMrna ","] { regsub {\.\.} $Zone " " Zone scan $Zone "%d %d" D F lappend LesDFexonMrna $D $F } set LesDFintronMrna {} foreach {D F} [lrange $LesDFexonMrna 1 end-1] { lappend LesDFintronMrna [expr $D+1] [expr $F-1] } set MTM1(exonmrna,ListOf,startstop) $LesDFexonMrna set MTM1(intronmrna,ListOf,startstop) $LesDFintronMrna set ZonesCds [StringSuivant " CDS join(" dans $GB] regsub {\).*} $ZonesCds "" ZonesCds regsub -all {[^0-9\.\,]} $ZonesCds "" ZonesCds set LesDFexon {} foreach Zone [split $ZonesCds ","] { regsub {\.\.} $Zone " " Zone scan $Zone "%d %d" D F lappend LesDFexon $D $F } set LesDFintron {} foreach {D F} [lrange $LesDFexon 1 end-1] { lappend LesDFintron [expr $D+1] [expr $F-1] } set MTM1(exon,ListOf,startstop) $LesDFexon set MTM1(intron,ListOf,startstop) $LesDFintron set MTM1(exoncds,ListOf,startstop) $LesDFexon set MTM1(introncds,ListOf,startstop) $LesDFintron set SeqGene [StringSuivant "\nORIGIN" dans $GB] regsub -nocase -all {[^a-z]} $SeqGene "" SeqGene set SeqGene [string toupper $SeqGene] set nSeqGene "n$SeqGene" set CdsStart [lindex $LesDFexon 0] set CdsStop [lindex $LesDFexon end] set MTM1(csd,start) $CdsStart set MTM1(csd,stop) $CdsStop set MTM1(seq,gene) $SeqGene set MTM1(tfa,gene) [SequenceFormatTFA $MTM1(seq,gene) "gene_$Access $Definition (gene)"] set LesDFexon5utr {} set LesDFexon3utr [list [expr $CdsStop+1]] set LaSeq {} foreach {D F} $LesDFexonMrna { if {$D<$CdsStart} { lappend LesDFexon5utr $D } if {$F<$CdsStart} { lappend LesDFexon5utr $F } if {$D>$CdsStop } { lappend LesDFexon3utr $D } if {$F>$CdsStop } { lappend LesDFexon3utr $F } set SeqMrna [string range $nSeqGene $D $F] lappend LaSeq $SeqMrna } lappend LesDFexon5utr [expr $CdsStart-1] set MTM1(exon5utr,ListOf,startstop) $LesDFexon5utr set MTM1(exon3utr,ListOf,startstop) $LesDFexon3utr set MTM1(seq,mrna) [join $LaSeq ""] set MTM1(tfa,mrna) [SequenceFormatTFA $MTM1(seq,mrna) "mrna_$Access $Definition (mrna)"] set exI 0 set LaSeq {} foreach {D F} $LesDFexon { incr exI set SeqEx [string range $nSeqGene $D $F] set MTM1(seq,exon$exI) $SeqEx lappend LaSeq $SeqEx } set MTM1(seq,cds) [join $LaSeq ""] set MTM1(tfa,cds) [SequenceFormatTFA $MTM1(seq,cds) "cds_$Access $Definition (cds)"] set inI 0 foreach {D F} $LesDFintron { incr inI set SeqIn [string range $nSeqGene $D $F] set MTM1(seq,intron$inI) $SeqIn } set MTM1(ListOf,Keys) [lsort [array names MTM1]] return [MTM1 $Qui $Quoi $Deb $Fin] } proc TestMutationMTM {{Type ""}} { if {$Type==""} { set Type "MisSens" } foreach H [MutationMTM ListHeaderPlease $Type] { foreach I [MutationMTM ListAllPlease $Type] { set Header [format "%30s" $H] set Valeur [MutationMTM $I $H $Type] set BeauI [format "%3d" $I] lappend LesLignes "$Header :$BeauI:=$Valeur= [MutationMTM $I Patients $Type]" } } set Texte [join $LesLignes "\n"] AfficheVariable $Texte "" $Type } proc CollecteMutationMTM {{Qui ""} {Quoi ""}} { global CollecteMutationMTM if {$Qui==""} { set Qui "ListOf"; set Quoi "Types" } if {[info exists CollecteMutationMTM($Qui,$Quoi)]} { return $CollecteMutationMTM($Qui,$Quoi) } if {[info exists CollecteMutationMTM("EstCharge")]} { if {$Qui=="Get" && $Quoi=="Csv"} { set LeTout {} lappend LeTout [join [CollecteMutationMTM "ListOf" "Keys"] ";"] foreach P [CollecteMutationMTM "ListOf" "Patients"] { lappend LeTout [join [CollecteMutationMTM $P "allvalues"] ";"] } set Tout [join $LeTout "\n"] return $Tout } return "" } set CollecteMutationMTM("EstCharge") 1 set LesTypes [MutationMTM ListOf Possible Type] set CollecteMutationMTM(ListOf,Types) [MutationMTM ListOf Possible Type] foreach Type $LesTypes { CollecteMutationMTMForType $Type } return [CollecteMutationMTM $Qui $Quoi] } proc CollecteMutationMTMForType {{Type ""}} { global CollecteMutationMTM set Seq [QueLaSequenceDuFichierTFA "[HomeRipp]/GenoretWww/Collaboration/MutationsMTM/MTM1.tfa"] set Seq [string toupper $Seq] set Seq "n$Seq" if {$Type==""} { set Type "MisSens" } set Oblige "Nucleotide_change" set LesTrois {} set LesErreurs {} set OldMut "trululu" set NbDeLaMut 1 set TotalNbCourant -1 set TotalNbPrecedant -1 set LesHeaders [MutationMTM ListHeaderPlease $Type] foreach I [MutationMTM ListAllPlease $Type] { set WL [MutationMTM $I "WholeLine" $Type] set TotalNbLu [MutationMTM $I "Total_nb" $Type] if {$TotalNbLu!=""} { set TotalNbCourant $TotalNbLu} set Mutation [MutationMTM $I $Oblige $Type] regsub -all " " $Mutation "" Mutation if {[regsub -all {\(? *\$.*} $Mutation "" Mutation]>0} { } if {[regexp {\$} $Mutation]} { set Mutation [Entre $Mutation] } if {$Mutation==""} { FaireLire "Horreur une mutation vide" } set Base "" if {[regexp -nocase {c.([0-9]+)([A-Z])>} $Mutation Match Pos Base]} { set Base [string toupper $Base] set Good [string index $Seq $Pos] if { ! [string equal $Good $Base]} { lappend LesErreurs "$Type $I $Mutation $Good $Base" } } set SeqDel "" if {[regexp -nocase {^c.([0-9]+)del([A-Z])$} $Mutation Match Pos SeqDel]} { set SeqDel [string toupper $SeqDel] set Good [string index $Seq $Pos] if { ! [string equal $Good $SeqDel]} { lappend LesErreurs "$Type $I $Mutation $Good $SeqDel" } } 82 if {[regexp -nocase {^c.([0-9]+)\-([0-9]+)del([A-Z]+)$} $Mutation Match PosD PosF SeqDel]} { set SeqDel [string toupper $SeqDel] set Good [string range $Seq $PosD $PosF] if { ! [string equal $Good $SeqDel]} { lappend LesErreurs "$Type $I $Mutation $Good $SeqDel" } } if {$OldMut==$Mutation} { lappend LesIsDeLaMut($Mutation) $I incr NbDeLaMut set TotalNbPrecedant $TotalNbCourant } else { if {$TotalNbPrecedant>0 && $TotalNbPrecedant!=$NbDeLaMut} { lappend LesErreurs "$Type [expr $I-1] TotalNb $TotalNbPrecedant != $NbDeLaMut de $OldMut" } set TotalNbPrecedant $TotalNbCourant set TotalNbCourant -1 set NbDeLaMut 1 set LesIsDeLaMut($Mutation) [list $I] } set FamilySize [llength $LesIsDeLaMut($Mutation)] set OldMut $Mutation set P [MutationMTM PatientCode $Type $I] lappend CollecteMutationMTM(ListOf,Patients) $P lappend CollecteMutationMTM(ListOf,patient) $P set Protein "" if {[set Pro [MutationMTM $I "Predicted_protein_change" $Type]]!=""} { set Protein $Pro } if {[set Pro [MutationMTM $I "Predicted_protein_or_splicing_alteration" $Type]]!=""} { set Protein $Pro } KeyList "PleaseReset" set CollecteMutationMTM($P,[KeyList pid]) $P set CollecteMutationMTM($P,[KeyList type]) $Type set CollecteMutationMTM($P,[KeyList patient]) [MutationMTM $I "Patients" $Type] set CollecteMutationMTM($P,[KeyList region]) [MutationMTM $I "Region" $Type] set CollecteMutationMTM($P,[KeyList mutation]) $Mutation set CollecteMutationMTM($P,[KeyList protein]) $Protein set CollecteMutationMTM($P,[KeyList familysize]) $FamilySize set CollecteMutationMTM($P,[KeyList phenotype]) [MutationMTM $I "Phenotype" $Type] set CollecteMutationMTM($P,[KeyList conservation]) [MutationMTM $I "Conservation" $Type] set CollecteMutationMTM($P,[KeyList frequence]) [MutationMTM $I "Frequence" $Type] set CollecteMutationMTM($P,[KeyList evidence]) [MutationMTM $I "Preuve_=_poly" $Type] set CollecteMutationMTM($P,[KeyList origine]) [MutationMTM $I "Mutation_origin" $Type] set CollecteMutationMTM($P,[KeyList references]) [MutationMTM $I "References" $Type] set CollecteMutationMTM($P,[KeyList comment]) [MutationMTM $I "RR" $Type] foreach Im $LesIsDeLaMut($Mutation) { set P [MutationMTM PatientCode $Type $Im] set CollecteMutationMTM($P,familysize) $FamilySize } if { ! [info exists CollecteMutationMTM(ListOf,Keys)]} { set CollecteMutationMTM(ListOf,Keys) [KeyList "PleaseGetKeys"] } foreach Key $CollecteMutationMTM(ListOf,Keys) { lappend CollecteMutationMTM($P,allvalues) $CollecteMutationMTM($P,$Key) } set OldWL $WL } return AfficheVariable [join $LesErreurs "\n"] "" "DetectedErrors" set Texte [join $LesTrois "\n"] return [AfficheVariable $Texte "" $Type] } proc FusionneMutationMTMPourTous {} { foreach Type [MutationMTM ListOf Possible Type] { FusionneMutationMTM $Type } } proc FusionneMutationMTM {{Type ""}} { set Seq [QueLaSequenceDuFichierTFA "[HomeRipp]/GenoretWww/Collaboration/MutationsMTM/MTM1.tfa"] set Seq [string toupper $Seq] set Seq "n$Seq" if {$Type==""} { set Type "MisSens" } set Oblige "Nucleotide_change" set LesTrois {} set LesErreurs {} set OldMut "trululu" set NbDeLaMut 1 set TotalNbCourant -1 set TotalNbPrecedant -1 set LesHeaders [MutationMTM ListHeaderPlease $Type] Espionne $LesHeaders foreach I [MutationMTM ListAllPlease $Type] { set WL [MutationMTM $I "WholeLine" $Type] set TotalNbLu [MutationMTM $I "Total_nb" $Type] if {$TotalNbLu!=""} { set TotalNbCourant $TotalNbLu} set Mutation [MutationMTM $I $Oblige $Type] regsub -all " " $Mutation "" Mutation if {[regsub -all {\(? *\$.*} $Mutation "" Mutation]>0} { } if {[regexp {\$} $Mutation]} { set Mutation [Entre $Mutation] } if {$Mutation==""} { lappend LesTrois $OldWL lappend LesTrois $WL set Fus {} foreach Mot1 $OldWL Mot2 $WL { set Mot [string trim "[string trim $Mot1] // [string trim $Mot2]" " /"] lappend Fus $Mot } lappend LesTrois $Fus lappend LesTrois "" } else { set Base "" if {[regexp -nocase {c.([0-9]+)([A-Z])>} $Mutation Match Pos Base]} { set Base [string toupper $Base] set Good [string index $Seq $Pos] if { ! [string equal $Good $Base]} { lappend LesErreurs "$Type $I $Mutation $Good $Base" } } set SeqDel "" if {[regexp -nocase {^c.([0-9]+)del([A-Z])$} $Mutation Match Pos SeqDel]} { set SeqDel [string toupper $SeqDel] set Good [string index $Seq $Pos] if { ! [string equal $Good $SeqDel]} { lappend LesErreurs "$Type $I $Mutation $Good $SeqDel" } } if {[regexp -nocase {^c.([0-9]+)\-([0-9]+)del([A-Z]+)$} $Mutation Match PosD PosF SeqDel]} { set SeqDel [string toupper $SeqDel] set Good [string range $Seq $PosD $PosF] if { ! [string equal $Good $SeqDel]} { lappend LesErreurs "$Type $I $Mutation $Good $SeqDel" } } Espionne "$OldMut $Mutation $TotalNbPrecedant $NbDeLaMut $TotalNbLu" if {$OldMut==$Mutation} { incr NbDeLaMut set TotalNbPrecedant $TotalNbCourant } else { if {$TotalNbPrecedant>0 && $TotalNbPrecedant!=$NbDeLaMut} { lappend LesErreurs "$Type [expr $I-1] TotalNb $TotalNbPrecedant != $NbDeLaMut de $OldMut" } set TotalNbPrecedant $TotalNbCourant set TotalNbCourant -1 set NbDeLaMut 1 } set OldMut $Mutation } set OldWL $WL } AfficheVariable [join $LesErreurs "\n"] "" "DetectedErrors" set Texte [join $LesTrois "\n"] return [AfficheVariable $Texte "" $Type] } proc MutationMTM {{Qui ""} {Quoi ""} {Ou ""}} { global MutationMTM if {$Qui==""} { set Qui "ListOf" ; set Quoi "ListOf" ; set Ou "All" } if {[info exists MutationMTM($Qui,$Quoi,$Ou)]} { return $MutationMTM($Qui,$Quoi,$Ou) } if {[info exists MutationMTM("EstCharge")]} { if {$Qui=="PatientCode"} { set Type $Quoi set I $Ou set lT [MutationMTM ListOf Possible Type] set iT [lsearch $lT $Type] set T [string index [lindex $lT $iT] 0] if {$Type=="SmallDelIns"} { set T "I" } set Imoins1 [expr $I - 1] set P [format "%s%4.4d" $T $Imoins1] return $P } if {$Ou=="" && [info exists MutationMTM($Qui,,$Quoi)]} { return $MutationMTM($Qui,,$Quoi) } return "" } set MutationMTM("EstCharge") 1 set Rep "[HomeRipp]/GenoretWww/Collaboration/MutationsMTM" set MutationMTM(ListOf,Possible,Type) [list Polymorphism MisSens NonSens SmallDelIns LargeDeletion SpliceSite] foreach Type $MutationMTM(ListOf,Possible,Type) { set F "$Rep/MutationsMTM-$Type.csv" if {[info exists T]} { unset T } LoadTxlWithRowsOfCells $F T -1 ";" "" "WholeLine" foreach Clef [array names T] { set MutationMTM($Clef,$Type) $T($Clef) } } foreach Clef [array names MutationMTM] { if {[regexp "^List" $Clef]} { regsub -all "\," $Clef " " Clef lappend MutationMTM(ListOf,ListOf,All) $Clef } } lappend MutationMTM(ListOf,ListOf,All) "ListOf ListOf All" return [MutationMTM $Qui $Quoi $Ou] } proc ExtractMutationFromRetinaHtml {{UrlOuFichier ""}} { if {$UrlOuFichier==""} { set UrlOuFichier "http://www.retina-international.org/sci-news/rdsmut.htm" } if {[regexp "^http" $UrlOuFichier]} { set Texte [HttpGetTextFromUrl $UrlOuFichier] } else { set Texte [ContenuDuFichier $UrlOuFichier] } set Table [ValeurDeLaBalise "table" Texte] Espionne [string range $Table 0 100] if { ! [regexp -nocase "Phenotype" $Table]} { set Table [ValeurDeLaBalise "table" Texte] } Espionne [string range $Table 0 100] set Entete [ValeurDeLaBalise "tr" Table] set LesTetes {} while 1 { set Tete [ValeurDeLaBalise "th" Entete] if {$Tete==""} { break } regsub -all {\n} $Tete "" Tete regsub -all {<[^>]+>} $Tete "" Tete regsub -all {\&} $Tete " and " Tete regsub -all { +} $Tete " " Tete regsub -all " " $Tete "_" Tete lappend LesTetes $Tete Espionne "Tete $Tete" } set I 0 while 1 { set Ligne [ValeurDeLaBalise "tr" Table] if {$Ligne==""} { break } foreach Tete $LesTetes { set Valeur [ValeurDeLaBalise "td" Ligne] while {[set B [ProchaineBalise Valeur "" "NePasRogner"]]!=""} { set Valeur [ValeurDeLaBalise $B Valeur] } regsub -all "\n" $Valeur " " Valeur regsub -all {]*>} $Valeur " " Valeur set T($I,$Tete) $Valeur } Espionne "$T($I,Phenotype) = $T($I,Mutation) + $T($I,Basechange) + $T($I,Nucleotide) + $T($I,Exon)" incr I } exit } proc BelleVueMutation {H V Nom} { if {$H=="MS2PH"} { return [H_Href $V "http://pig-pbil.ibcp.fr/cgi-bin/magos/home"] } if {$H=="Mutation"} { set P "" scan $V "%s %s" B P if {$B==""} { return $V } set Access "${Nom}_${B}_${P}" set Queue $Access regsub -all {[>\?]} $Queue "-" Queue set Clics "" if { ! [regexp {[^p\.]} $P]} { append Clics [H_Href $V "[WscopeScience]&FileMoi&nuctfaMut&$Queue" "target='_blank'"] } else { regsub "$B $P" $V "" Commentaire append Clics [H_Href $B "[WscopeScience]&FileMoi&nuctfaMut&$Queue" "target='_blank'"] append Clics " " append Clics [H_Href $P "[WscopeScience]&FileMoi&prottfaMut&$Queue" "target='_blank'"] append Clics " " append Clics $Commentaire } append Clics "  " append Clics [H_Href "(See diff)" "[WscopeScience]&ShowMutationOnWeb&$Nom&$Queue" "target='_blank'"] return $Clics } return [BelleVue $H $V $Nom] } proc ShowMutationOnWeb {Nom Queue} { set FWT [RepertoireDuGenome]/nuctfa/$Nom set FMu [RepertoireDuGenome]/nuctfaMut/$Queue if {[FileAbsent $FWT]} { return "Sorry, the Wild Type file doesn't exist" } if {[FileAbsent $FMu]} { return "Sorry, the mutation file doesn't exist" } return [CompareADNDesFichiersTFA $FWT $FMu "SansAffichage"] } proc StoreSeqMut {Nom Alias SeqNuc B P F {Status ""}} { set Access "${Nom}_${B}_${P}" set Queue $Access regsub -all {[\>\?]} $Queue "-" Queue Espionne "Queue $Queue" set Remarque "" if {$Status=="ProtAnnounceWrong"} { set Remarque "CAUTION : the protein code is not correct the sequence can be wrong" } if {$Status=="StopNotFound"} { set Remarque "CAUTION : the stop codon was not found the sequence ends abnormally" } set Entete "$Access mutated sequence of $Alias $Remarque" set NucTFA [SequenceFormatTFA $SeqNuc $Entete "nucbrut"] set FichierN "[RepertoireDuGenome]/nuctfaMut/$Queue" Sauve $NucTFA dans $FichierN set SeqPro [SeqNucToSeqPro $SeqNuc] set ProTFA [SequenceFormatTFA $SeqPro $Entete "protbrut"] set FichierP "[RepertoireDuGenome]/prottfaMut/$Queue" Sauve $ProTFA dans $FichierP return $Queue } proc RetGeneMutation {{Quoi ""}} { if {$Quoi=="LesHeaders"} { return [list "GscopeId" "GeneName" "MS2PH" "Mutation" "Family" "Other Allele Mutation"] } foreach Nom [ListeDesPABs] { set Alias [Alias $Nom] foreach Mut [LesMutations $Nom [list "LCA:" "Mut:" "AGal:"]] { set Famille "" set Mutation $Mut if { ! [regexp {^[cgp]\.} $Mut]} { scan $Mut "%s" Famille regsub {[^ ]+ } $Mut "" Mutation } lappend LesMutationsDeLaFamille($Famille) $Mutation } foreach Mut [LesMutations $Nom [list "LCA:" "Mut:" "AGal:"]] { set OtherAlleleMutation "" set Famille "" set Mutation $Mut if { ! [regexp {^[cgp]\.} $Mut]} { scan $Mut "%s" Famille regsub {[^ ]+ } $Mut "" Mutation } if {$Famille!="" && [info exists LesMutationsDeLaFamille($Famille)]} { set M1 "" set M2 "" ScanLaListe $LesMutationsDeLaFamille($Famille) M1 M2 set OtherAlleleMutation $M1 if {$M2!="" && $M2!=$Mutation} { set OtherAlleleMutation $M2 } } if {$OtherAlleleMutation==$Mutation} { set OtherAlleleMutation "same mutation on both alleles" } else { } regsub "RG" $Nom "MS2PH" MS2PHId set Ligne "$Nom;$Alias;$MS2PHId;$Mutation;$Famille;$OtherAlleleMutation" lappend LesLignes $Ligne } } return $LesLignes } proc RetGeneMutationOnWeb {} { set LesHeaders [RetGeneMutation "LesHeaders"] set NbHeaders [llength $LesHeaders] set Titre "Gscope summary of mutations" set HeaderDuHtml "" Html_ZeroToBody $Titre $HeaderDuHtml Html_BackTo Html_Append [H_Balise $Titre "h3"] set NbCol $NbHeaders CouleurDegradee $NbCol set Liste {} lappend Liste $NbCol lappend Liste "border='1' cellpadding='3' cellspacing='1'" lappend Liste "" foreach Header $LesHeaders { lappend Liste "bgcolor='[CouleurDegradee]' nowrap='nowrap'" } foreach Header $LesHeaders { lappend Liste $Header } foreach Ligne [RetGeneMutation "GetList"] { set LesValeurs [split $Ligne ";"] set Nom [lindex $LesValeurs 0] if { ! [EstUnPAB $Nom]} { continue } foreach H $LesHeaders V $LesValeurs { set Vue [BelleVueMutation $H $V $Nom] lappend Liste $Vue } } Html_TableFromList $Liste Html_BodyToEnd return [Html_Get "ZeroIt"] } proc CorrigeLesInfosLCA {} { foreach Nom [ListeDesPABs] { set Alias [Alias $Nom] set Inf [ExtraitInfo $Nom $Alias] if {$Inf==""} { continue } foreach M [split $Inf "/"] { set M [string trim $M] Espionne "\n$Nom" set Fin $M if {[regexp {P\.([A-Z])([0-9]+)([A-Z])} $M Match A P N]} { set AAA [string totitle [UT $A]] set NNN [string totitle [UT $N]] if {$NNN=="Xxx"} { set NNN "X" } set New "p.$AAA$P$NNN" regsub $Match $M $New Fin } Espionne $Fin InformeSansDemander $Nom "Mut: $Fin" } } } proc LesMutations {Nom LesCas} { set LesMutations {} foreach Cas $LesCas { if {$Cas=="AGal:"} { if {[Alias $Nom]!="RDH12"} { continue } LConcat LesMutations [RDH12PatientAndMutation] continue } set M [ExtraitInfo $Nom "$Cas"] regsub -all { */ *} $M "/" M LConcat LesMutations [split $M "/"] } return $LesMutations } proc LesLca Nom { set L [ExtraitInfo $Nom "LCA:"] regsub -all " / " $L "/" L return [split $L "/"] } proc LesMut Nom { set L [ExtraitInfo $Nom "Mut:"] regsub -all " / " $L "/" L return [split $L "/"] } proc VerifieLesInfosLca {{LesLcaEtOuMut ""} {Liste ""}} { if {[EstUnPAB $Liste]} { set Liste [list $Liste] } if {$Liste==""} { set Liste [ListeDesPABs] } if {[OuiOuNon "Do I test all ?"]} { set TestSingle 1 set TestDel 1 set TestIns 1 } else { set TestSingle [OuiOuNon "Do I test singles?"] set TestDel [OuiOuNon "Do I test del ?"] set TestIns [OuiOuNon "Do I test ins ?"] } if {$LesLcaEtOuMut==""} { set LesLcaEtOuMut [ChoixParmi [list "LCA:" "Mut:" "Gal:" "LCA: Mut: Gal:"]] } foreach Nom $Liste { set Alias [Alias $Nom] Espionne "$Nom $Alias" set SeqNuc [QueLaSequenceDuFichierTFA [GscopeFile $Nom "nuctfa"]] set SeqNuc "n$SeqNuc" set SeqPro [QueLaSequenceDuFichierTFA [GscopeFile $Nom "prottfa"]] set SeqPro "x$SeqPro" foreach LCA [LesMutations $Nom $LesLcaEtOuMut] { Espionne $LCA set F "" set B "" set P "" scan $LCA "%s %s %s" F B P if { ! [regexp {^[0-9_\*]+} $LCA F]} { set F "000" } if { ! [regexp {c\.[^ $]+} $LCA B]} { set B "" } if { ! [regexp {p\.[^ $]+} $LCA P]} { set P "" } Espionne "F=$F B=$B P=$P" if {[regexp {([A-Z])([0-9]+)([A-Z])} $P Match U1 pP U2]} { FaireLire "I found an 1 letter code for $LCA" set OldP $P set AAA1 [string totitle [UT $U1]] set AAA2 $U2 if {$U2!="X"} { set AAA2 [string totitle [UT $U2]] } set P "p.$AAA1$pP$AAA2" Espionne "F=$F B=$B P=$P renomme" set LCA "$F $B $P it was_in_1_letter_code $OldP" InformeSansDemander $Nom "Gal2: $B $P it was_in_1_letter_code $OldP" } else { InformeSansDemander $Nom "Gal2: $B $P" } regsub {c\.} $B "" Code if { ! [regexp {^[0-9]+(\-?[0-9]+)?} $Code Match ]} { FaireLire "Bad code : $Code" } set Fin "" regsub {\-} $Match " " DF scan $DF "%d %sd" Debut Fin if {$Fin==""} { set Fin $Debut } if {([regexp "del" $Code] || [regexp "ins" $Code]) && ($TestIns || $TestDel)} { set Nouveau [StringSuivant "ins" dans $Code] set PosP [expr ($Debut-1 +3)/3] set PosF [expr $PosP*3] set PosD [expr $PosF - 2] set Codon [string range $SeqNuc $PosD $PosF] set A [AAduCodon $Codon] set AAA [string totitle [UT $A]] Espionne "$Nom $LCA $Codon $AAA$PosP $P" if { ! [regexp "p\.$AAA${PosP}" $P]} { if {[OuiOuNon "for $Nom $LCA\n\ I didn't found p.$AAA${PosP}fs in $P\n\ Codon $Codon $A $AAA\n\ Do I inform $Nom"] } { Informe $Nom } } set SeqNucMut "[string range $SeqNuc 0 [expr $Debut - 1]]$Nouveau[string range $SeqNuc [expr $Fin + 1] end]" set Long [string length $SeqNucMut] set FoundStop 0 while 1 { if {$PosF>=$Long} { break } set Codon [string range $SeqNucMut $PosD $PosF] if {[CodonStopPossible $Codon]} { set FoundStop 1 ; break } incr PosD 3 incr PosF 3 } if {$FoundStop} { set PosS [expr $PosF/3] set PosX [StringSuivant "X" dans $LCA] regsub { .*} $PosX "" PosX if {$PosX<$PosP} { FaireLire "Relative PosX in $LCA" ; set PosX [expr $PosP + $PosX]} if {$PosX==$PosS} { Espionne "$LCA $PosS $Codon $AAA$PosP $P" set SeqNucMutOK [string range $SeqNucMut 1 $PosF] StoreSeqMut $Nom $Alias $SeqNucMutOK $B $P $F } else { if {[OuiOuNon "for $Nom $LCA \n\ The annouced Stop position $PosX is not what I found $PosS\nDo I show ?"]} { VoisinADN [string range $SeqNucMut 1 end] "" "" "" "" "$PosX $PosS Mutant of $Nom $LCA" VoisinADN [string range $SeqNuc 1 end] "" "" "" "" "$PosX $PosS Wildtype of $Nom $LCA" Espionne "$LCA $Codon $AAA$PosP $P" Informe $Nom "LCA: $LCA but should be p.$AAA${PosP}fsX$PosS" } } set SeqNucMutOK [string range $SeqNucMut 1 $PosF] StoreSeqMut $Nom $Alias $SeqNucMutOK $B $P $F "ProtAnnounceWrong" } else { if {[OuiOuNon "For $Nom $LCA I didn't find the stop. Do I show ?"]} { VoisinADN [string range $SeqNuc 1 end] "" "" "" "" "Wildtype of $Nom $LCA" VoisinADN [string range $SeqNucMut 1 end] "" "" "" "" "Mutant of $Nom $LCA" AfficheVariable "$LCA $Codon $AAA$PosP $P" "AvecRetour" } set SeqNucMutOK "[string range $SeqNucMut 1 end]" StoreSeqMut $Nom $Alias $SeqNucMutOK $B $P $F "StopNotFound" } continue } if {([regexp "ins" $Code] || [regexp "dup" $Code]) && $TestIns} { if {[regexp "dup" $Code]} { set DD "" set FD "" set DupAnnonce "" if { ! [regexp {([0-9]+)\-([0-9]+)dup([A-Z]+)?} $Code Match DD FD DupAnnonce]} { FaireLire "the dup is incorrect. I'll cancel $LCA" ; continue } set DupSequence [string range $SeqNuc $DD $FD] if {$DupAnnonce!="" && ! [string equal -nocase $DupAnnonce $DupSequence]} { FaireLire "The announced dup $DupAnnonce is not $DupSequence" } set Debut $FD set Fin [expr $Debut + 1] set Code "$Debut-${Fin}ins[string toupper $DupSequence]" Espionne "test dup : $LCA $Code" } else { Espionne "test ins : $LCA $Code" } set Nouveau [StringSuivant "ins" dans $Code] set PosP [expr ($Debut+3)/3] set PosF [expr $PosP*3] set PosD [expr $PosF - 2] set Codon [string range $SeqNuc $PosD $PosF] set A [AAduCodon $Codon] set AAA [string totitle [UT $A]] Espionne "$Nom $LCA $Codon $AAA$PosP $P" if { ! [regexp "p\.$AAA${PosP}fs" $P]} { if {[OuiOuNon "for $Nom $LCA\n\ I didn't found p.$AAA${PosP}fs in $P\n\ Codon $Codon $A $AAA\n\ Do I inform $Nom"] } { Informe $Nom } } set SeqNucMut "[string range $SeqNuc 0 $Debut]$Nouveau[string range $SeqNuc $Fin end]" set Long [string length $SeqNucMut] set FoundStop 0 while 1 { if {$PosF>=$Long} { break } set Codon [string range $SeqNucMut $PosD $PosF] if {[CodonStopPossible $Codon]} { set FoundStop 1 ; break } incr PosD 3 incr PosF 3 } if {$FoundStop} { set PosS [expr $PosF/3] set PosX [StringSuivant "X" dans $LCA] regsub { .*} $PosX "" PosX if {$PosX<$PosP} { FaireLire "Relative PosX in $LCA" ; set PosX [expr $PosP + $PosX]} if {$PosX==$PosS} { Espionne "$LCA $PosS $Codon $AAA$PosP $P" set SeqNucMutOK [string range $SeqNucMut 1 $PosF] StoreSeqMut $Nom $Alias $SeqNucMutOK $B $P $F } else { if {[OuiOuNon "for $Nom $LCA \n\ The annouced Stop position $PosX is not what I found $PosS\nDo I show ?"]} { VoisinADN [string range $SeqNucMut 1 end] "" "" "" "" "$PosX $PosS Mutant of $Nom $LCA" VoisinADN [string range $SeqNuc 1 end] "" "" "" "" "$PosX $PosS Wildtype of $Nom $LCA" Espionne "$LCA $Codon $AAA$PosP $P" Informe $Nom "LCA: $LCA but should be p.$AAA${PosP}fsX$PosS" } } set SeqNucMutOK [string range $SeqNucMut 1 $PosF] StoreSeqMut $Nom $Alias $SeqNucMutOK $B $P $F "ProtAnnounceWrong" } else { if {[OuiOuNon "For $Nom $LCA I didn't find the stop. Do I show ?"]} { VoisinADN [string range $SeqNuc 1 end] "" "" "" "" "Wildtype of $Nom $LCA" VoisinADN [string range $SeqNucMut 1 end] "" "" "" "" "Mutant of $Nom $LCA" AfficheVariable "$LCA $Codon $AAA$PosP $P" "AvecRetour" } set SeqNucMutOK "[string range $SeqNucMut 1 end]" StoreSeqMut $Nom $Alias $SeqNucMutOK $B $P $F "StopNotFound" } continue } if {[regexp "del" $Code] && $TestDel} { set Annonce [StringSuivant "del" dans $Code] set Ancien [string range $SeqNuc $Debut $Fin] if {$Annonce!="" && ! [string equal -nocase $Annonce $Ancien]} { FaireLire "For $Nom $LCA the announced sequence is \n$Annonce\nthe ture sequence is \n$Ancien" } set PosP [expr ($Debut+2)/3] set PosF [expr $PosP*3] set PosD [expr $PosF - 2] set Codon [string range $SeqNuc $PosD $PosF] set A [AAduCodon $Codon] set AAA [string totitle [UT $A]] if { ! [regexp "p\.$AAA${PosP}fs" $P]} { if {[OuiOuNon "for $Nom $LCA\n\ I didn't found p.$AAA${PosP}fs in $P\n\ Codon $Codon $A $AAA\n\ Do I inform $Nom"]} { Informe $Nom } } set SeqNucMut [string replace $SeqNuc $Debut $Fin ""] set Long [string length $SeqNucMut] set FoundStop 0 while 1 { if {$PosF>=$Long} { break } set Codon [string range $SeqNucMut $PosD $PosF] if {[CodonStopPossible $Codon]} { set FoundStop 1 ; break } incr PosD 3 incr PosF 3 } if {$FoundStop} { set PosS [expr $PosF/3] set PosX [StringSuivant "X" dans $LCA] regsub { .*} $PosX "" PosX if {$PosX<$PosP} { FaireLire "Relative PosX in $LCA" ; set PosX [expr $PosP + $PosX]} if {$PosX==$PosS} { Espionne "$LCA $PosS $Codon $AAA$PosP $P" set SeqNucMutOK [string range $SeqNucMut 1 $PosF] StoreSeqMut $Nom $Alias $SeqNucMutOK $B $P $F } else { if {[OuiOuNon "for $Nom $LCA \n\ The annouced Stop position $PosX is not what I found $PosS\nDo I show ?"]} { VoisinADN [string range $SeqNucMut 1 end] "" "" "" "" "$PosX $PosS Mutant of $Nom $LCA" VoisinADN [string range $SeqNuc 1 end] "" "" "" "" "$PosX $PosS Wildtype of $Nom $LCA" Espionne "$LCA $Codon $AAA$PosP $P" Informe $Nom "LCA: $LCA but should be p.$AAA${PosP}fsX$PosS" } set SeqNucMutOK [string range $SeqNucMut 1 $PosF] StoreSeqMut $Nom $Alias $SeqNucMutOK $B $P $F "ProtAnnounceWrong" } } else { if {[OuiOuNon "For $Nom $LCA I didn't find the stop. Do I show ?"]} { VoisinADN [string range $SeqNuc 1 end] "" "" "" "" "Wildtype of $Nom $LCA" VoisinADN [string range $SeqNucMut 1 end] "" "" "" "" "Mutant of $Nom $LCA" AfficheVariable "$LCA $Codon $AAA$PosP $P" "AvecRetour" } set SeqNucMutOK [string range $SeqNucMut 1 end] StoreSeqMut $Nom $Alias $SeqNucMutOK $B $P $F "StopNotFound" } continue } if {$TestSingle} { if {$B=="" && $P!=""} { if {[regexp {p.([A-Z][a-z][a-z])([0-9]+)([A-Z][a-z][a-z]|X)} $P Match AncienAAA PosiP NouveauAAA]} { set AncienA [UT $AncienAAA] if {$NouveauAAA=="X"} { set NouveauA "X" } else { set NouveauA [UT $NouveauAAA] } set AAADeSeq [string index $SeqPro $PosiP] if {$AncienA!=$AAADeSeq} { FaireLire "$P id $AncienAAA and should be $AAADeSeq" continue } else { set PosiNF [expr $PosiP * 3] set PosiND [expr $PosiNF - 2] set CodonAncien [string range $SeqNuc $PosiND $PosiNF] set LesMutationsPossibles [LesCodesGenetiques $NouveauA] set L [list "$CodonAncien as to be mutate to what ? Please choose one." ] LConcat L $LesMutationsPossibles set LesMutationsChoix [ChoixParmi $L] if {$Choix!=""} { set PosiN $PosiNF foreach a [split $CodonAncien ""] n [split $Choix ""] { set a [string toupper $a] set n [string toupper $n] if {$n!=$a} { break } incr PosiN } set BonB "c.${PosiN}$a>$n" set BonneMut "$BonB $P rR a invente $BonB" Informe $Nom "Mut: $BonneMut" } continue } } } set Annonce [StringSuivant $Match dans $Code] regsub ">.*" $Annonce "" Annonce set Nouveau [StringSuivant ">" dans $Code] set Ancien [string range $SeqNuc $Debut $Fin] Espionne "$B $Match $Debut $Fin $Annonce $Ancien $Nouveau" if {$Annonce==""} { if {[OuiOuNon "For $Nom $LCA\n\ I didn't found the sequence to replace\n\ Do I inform $Nom"]} { Informe $Nom } continue } if { ! [string equal -nocase $Annonce $Ancien]} { if {[OuiOuNon "For $Nom $LCA the announced sequence $Annonce is not what i found $Ancien\n\ Do I inform $Nom"]} { Informe $Nom } if {[OuiOuNon "Do I skipp $Nom $LCA"]} { continue } } set PosP [expr ($Debut+2)/3] set PosF [expr $PosP*3] set PosD [expr $PosF - 2] set Codon [string range $SeqNuc $PosD $PosF] set A [AAduCodon $Codon] set AAA [string totitle [UT $A]] Espionne "$LCA $Codon $AAA$PosP $P" if { ! [regexp "p\.$AAA${PosP}" $P]} { if {[OuiOuNon "for $Nom $LCA\n\ I didn't found p.$AAA${PosP}fs in $P\n\ Codon $Codon $A $AAA\n\ Do I inform $Nom"]} { Informe $Nom } } set NouveauAnnonce [StringSuivant "p\.$AAA${PosP}" dans $LCA] regsub { .*} $NouveauAnnonce "" NouveauAnnonce set SeqNucMut [string replace $SeqNuc $Debut $Fin $Nouveau] set Long [string length $SeqNucMut] set FoundStop 0 Espionne "$LCA $Code" set TestePremier 1 while 1 { if {$PosF>=$Long} { break } set Codon [string range $SeqNucMut $PosD $PosF] if {$TestePremier} { set NouveauM [AAduCodon $Codon] set NouveauMut [string totitle [UT [AAduCodon $Codon]]] if {$NouveauMut=="Xxx"} { set NouveauMut "X" } if {$NouveauMut!=$NouveauAnnonce} { if {[OuiOuNon "Do I show $LCA $Codon $NouveauMut==$NouveauAnnonce"]} { VoisinADN [string range $SeqNuc 1 end] "" "" "" "" "Wildtype of $Nom $LCA" VoisinADN [string range $SeqNucMut 1 end] "" "" "" "" "Mutant of $Nom $LCA should be $NouveauMut $NouveauM" Informe $Nom } } } set TestePremier 0 if {[CodonStopPossible $Codon]} { set FoundStop 1 ; break } incr PosD 3 incr PosF 3 } if {$FoundStop} { set PosS [expr $PosF/3] set PosX [StringSuivant "fsX" dans $LCA] regsub { .*} $PosX "" PosX if {$PosX!=""} { if {$PosX==$PosS} { Espionne "$LCA $PosS $Codon $AAA$PosP $P" set SeqNucMutOK [string range $SeqNucMut 1 $PosF] StoreSeqMut $Nom $Alias $SeqNucMutOK $B $P $F } else { VoisinADN [string range $SeqNucMut 1 end] "" "" "" "" "$PosX $PosS Mutant of $Nom $LCA" VoisinADN [string range $SeqNuc 1 end] "" "" "" "" "$PosX $PosS Wildtype of $Nom $LCA" Espionne "$LCA $Codon $AAA$PosP $P" Informe $Nom "LCA: $LCA but should be p.$AAA${PosP}fsX$PosS" set SeqNucMutOK [string range $SeqNucMut 1 $PosF] StoreSeqMut $Nom $Alias $SeqNucMutOK $B $P $F "ProtAnnounceWrong" } } else { set SeqNucMutOK [string range $SeqNucMut 1 $PosF] StoreSeqMut $Nom $Alias $SeqNucMutOK $B $P $F } } else { if {[regexp "fs" $LCA]} { if {[OuiOuNon "For $Nom $LCA I didn't find the stop. Do I show ?"]} { VoisinADN [string range $SeqNuc 1 end] "" "" "" "" "Wildtype of $Nom $LCA" VoisinADN [string range $SeqNucMut 1 end] "" "" "" "" "Mutant of $Nom $LCA" AfficheVariable "$LCA $Codon $AAA$PosP $P" "AvecRetour" } } set SeqNucMutOK [string range $SeqNucMut 1 end] StoreSeqMut $Nom $Alias $SeqNucMutOK $B $P $F "StopNotFound" } continue } } } return } proc TesteLesMutationsLCA {} { Delimite set LesHeaders [LCA ListOf Headers] set LesHs [LIndexes $LesHeaders 2 3 5 6] foreach TN [LCA ListOf Tables] { set Gene [LCA $TN Gene] set Nom [NomDuAlias $Gene] VoisinADN $Nom "nuctfa" set SeqNuc [QueLaSequenceDuAlias $Gene "nuctfa"] if {$SeqNuc==""} { continue } set SeqNuc "n$SeqNuc" foreach Family [LCA $TN Families] { foreach {H HP H2 HP2} $LesHs { set B [string trim [LCA $Family $H] " ."] set P [string trim [LCA $Family $HP] " ."] set B2 [string trim [LCA $Family $H2] " ."] set P2 [string trim [LCA $Family $HP2] " ."] set TBP "$TN $Gene $B $P" set TBP2 "$TN $Gene $B2 $P2" lappend LesTBP $TBP $TBP2 set BPBP [lsort [list "$B $P" "$B2 $P2"]] ScanLaListe $BPBP BP BP2 scan $BP "%s %s" B P scan $BP2 "%s %s" B2 P2 set TBPBP2 "$TN $B $P $B2 $P2" lappend LesFamillesDe($TBPBP2) $Family lappend LesTBPBP2 $TBPBP2 if {[info exists AutreDe($TN,$B)] && $AutreDe($TN,$B)!=$P} { FaireLire "$Family $TN $B \n$AutreDe($TN,$B)\n$P" } set AutreDe($TN,$B) $P } } foreach Family [LCA $TN Families] { foreach {H HP} $LesHs { set V [string trim [LCA $Family $H] " ."] regsub -all "_" $V "-" V regsub -all {[^0-9]} $V " " VPourPos set Pos "" scan $VPourPos "%d" Pos if {$Pos==""} { set Info [string trim "LCA_error: $Family $V [LCA $Family $HP]"] regsub -all {[\:\*\+\-\?]} $Info {\\&} InfoX Espionne $InfoX if { ! [regexp $InfoX [ExtraitInfo $Nom]]} { Informe $Nom $Info } continue } set O [string index $SeqNuc $Pos] set W "" regsub { *c *\.} $V "" BonV if {[regexp {^[0-9]+del} $BonV Match]} { regsub $Match $V "" W regsub "c\." $W "" W } elseif {[regexp {^[0-9]+\-[0-9]+del} $BonV Match]} { regsub $Match $BonV "" W regsub -all {[^0-9]} $Match " " P1P2 set Pos1 9999 set Pos2 -1 scan $P1P2 "%d %d" Pos1 Pos2 set O [string range "$SeqNuc" $Pos1 $Pos2] } else { regsub {c *\. *[0-9]+} $V "" W regsub {>.*} $W "" W } if {[string equal -nocase $O $W]} { set Info [string trim "LCA: $Family $V [LCA $Family $HP]"] regsub -all {[\:\*\+\-\?]} $Info {\\&} InfoX Espionne $InfoX if { ! [regexp $InfoX [ExtraitInfo $Nom]]} { Informe $Nom $Info } continue } set Info [string trim "LCA_pb: $Family $V [LCA $Family $HP] no corespondance between $O and $W"] regsub -all {[\:\*\+\-\?]} $Info {\\&} InfoX Espionne $InfoX if { ! [regexp $InfoX [ExtraitInfo $Nom]]} { Informe $Nom $Info } Espionne "$O $W \t$Gene $Family $V" } } } set Avant [llength $LesTBPBP2] set LesTBPBP2 [lsort -u $LesTBPBP2] EspionneL $LesTBPBP2 set Apres [llength $LesTBPBP2] Espionne "$Avant $Apres" foreach TBPBP2 $LesTBPBP2 { Espionne "" Espionne $TBPBP2 Espionne $LesFamillesDe($TBPBP2) } set LesTBP [lsort -unique $LesTBP] EspionneL $LesTBP return } proc CreateSqlForLCA {} { set SqlTable "kaplan" foreach TN [LCA ListOf Tables] { set Gene [LCA $TN Gene] set Sql "insert into $SqlTable.gene (name,description) values \ ('$Gene','This gene is the reference of Table $TN: mutations in patients affected with LCA');" Espionne $Sql } exit } proc RDH12CodificationFromGal {QuiB QuiP Quoi} { global RDH12CodificationFromGal regsub -all {\+} $QuiB ">" QuiB set Qui "$QuiB,$QuiP" if {[info exists RDH12CodificationFromGal($Qui,$Quoi)]} { return $RDH12CodificationFromGal($Qui,$Quoi) } if {[info exists RDH12CodificationFromGal("EstCharge")]} { return "$QuiB $QuiP" } set RDH12CodificationFromGal("EstCharge") 1 foreach Ligne [LesMutations [NomDuAlias "RDH12"] "Gal:"] { set OldB "" set OldP "" Espionne $Ligne scan $Ligne "%s %s %s %s %s %s" B P it was OldB OldP if {[regexp "^p" $OldB]} { set OldP $OldB ; set OldB "" } if {$OldB==""} { set OldB $B } if {$OldP==""} { set OldP $P } set RDH12CodificationFromGal($B,$P,Old) "$OldB $OldP" set RDH12CodificationFromGal($OldB,$OldP,New) "$B $P" set RDH12CodificationFromGal($B,$P,New) "$B $P" set RDH12CodificationFromGal($OldB,$OldP,Old) "$OldB $OldP" set RDH12CodificationFromGal($B,$P,Line) $Ligne set RDH12CodificationFromGal($OldB,$OldP,Line) $Ligne } return [RDH12CodificationFromGal $QuiB $QuiP $Quoi] } proc InformeRDH12 {} { set Nom [NomDuAlias "RDH12"] foreach BP [RDH12 ListOf Mutations] { InformeSansDemander $Nom "GAL: $BP" } } proc RDH12PatientAndMutation {} { foreach Patient [RDH12 ListOf Patients] { set NdMut [RDH12 $Patient "NdMut"] set LesMutationsDuPatient $NdMut lappend LesMutationsDuPatient [RDH12 $Patient "PaterMut"] lappend LesMutationsDuPatient [RDH12 $Patient "MaterMut"] foreach Mut $LesMutationsDuPatient { scan $Mut "%s %s" B P set Ligne [RDH12CodificationFromGal $B $P Line] set FBP "AG-$Patient $Ligne" lappend RDH12PatientAndMutation $FBP } } return $RDH12PatientAndMutation } proc RDH12 {{Qui ""} {Quoi ""}} { global RDH12 Wup "Ici on cree des ordres sql de creation des tables mais ce n'est pas en core utilise" if {$Qui==""} { set Qui "LesOrdres" ; set Quoi "SQL" } if {[info exists RDH12($Qui,$Quoi)]} { return $RDH12($Qui,$Quoi) } if {[info exists RDH12("EstCharge")]} { return "" } set RDH12("EstCharge") 1 set LesValeurs [LesLignesDuFichier "[HomeRipp]/GenoretBeaufort/Recu/DeGal/RDH12-EVI-Genoret-1.txt"] set T [expr [llength $LesValeurs]/3 -1] set I -1 set iSQL 0 foreach CLu [lrange $LesValeurs [incr I] [incr I $T]] \ PLu [lrange $LesValeurs [incr I] [incr I $T]] \ SLu [lrange $LesValeurs [incr I] [incr I $T]] { Espionne "\n$CLu $PLu $SLu" regsub -all "_" $CLu "-" CLu regsub -all -nocase {[^a-z0-9]} $SLu " " S set A1 "" ; set A2 "" scan $S "%s %s %s" Id A1 A2 set C $CLu set P $PLu if {$C==""} { set C $OldC } if {$P==""} { set P $OldP } set OldC $C set OldP $P set Ap "x" ; set Am "x" ; set And "x" if {$A1=="nd" || $A2=="nd" } { set And "nd" } if {$A1=="p" || $A2=="p" } { set Ap "p" } if {$A1=="m" || $A2=="m" } { set Am "m" } if {$Ap=="p"} { set RDH12($Id,PaterMut) "$C $P" set CreateP [incr iSQL] lappend LesOrdresSql "create $CreateP RDH12 $C $P $Id p" if { ! [info exists DejaVuPaterMut($C,$P)]} { lappend RDH12(ListOf,PaterMut) "$C $P" set DejaVuPaterMut($C,$P) 1 } } if {$Am=="m"} { set RDH12($Id,MaterMut) "$C $P" set CreateM [incr iSQL] lappend LesOrdresSql "create $CreateM RDH12 $C $P $Id m" if { ! [info exists DejaVuMaterMut($C,$P)]} { lappend RDH12(ListOf,MaterMut) "$C $P" set DejaVuMaterMut($C,$P) 1 } } if {$And=="nd"} { lappend RDH12($Id,NdMut) "$C $P" set CreateND [incr iSQL] lappend LesOrdresSql "create $CreateND RDH12 $C $P $Id nd" if { ! [info exists DejaVuNdMut($C,$P)]} { lappend RDH12(ListOf,NdMut) "$C $P" set DejaVuNdMut($C,$P) 1 } } if { ! [info exists DejaVuMut($C,$P)]} { lappend RDH12(ListOf,Mutations) "$C $P" set DejaVuMut($C,$P) 1 } if {$Ap=="p" && $Am=="m"} { set Link [incr iSQL] lappend LesOrdresSql "link $Link $CreateP $CreateM RDH12 $C $P $Id p m" set Link [incr iSQL] lappend LesOrdresSql "link $Link $CreateM $CreateP RDH12 $C $P $Id m p" } lappend RDH12(ListOf,Patients) $Id } set RDH12(ListOf,Mutations) [lsort -unique $RDH12(ListOf,Mutations)] set RDH12(ListOf,Mutations) [lsort -command DenicheEtCompareLesIntegersEnDebut $RDH12(ListOf,Mutations)] set RDH12(ListOf,Patients) [lsort -unique $RDH12(ListOf,Patients)] set RDH12(LesOrdres,SQL) $LesOrdresSql return [RDH12 $Qui $Quoi] } proc GoodCodeForPredictedChange {V {WithoutReferences ""}} { if {$WithoutReferences==""} { set WithoutReferences "WithoutReferences" } set WithoutReferences [string equal -nocase $WithoutReferences "WithoutReferences"] set V [string trim $V "."] set OldV $V if {[regexp {[0-9](\,[0-9])+$} $V Match]} { regsub -all "\," $Match " " StrMatch scan $StrMatch "%d %d" A B set Bon $Match if {$A>$B} { regsub {^[0-9]} $Match "" Match regsub {\,} $Match "" Bon } regsub -all "\," $Match "\\," ExMatch regsub $ExMatch $V "^$Bon" V if {$WithoutReferences} { regsub {\^.*$} $V "" V } return $V } if {[regexp {\,([0-9]+)$} $V Match P2]} { set P1 [expr $P2-1] regsub "$P1\,$P2$" $V "^$P1,$P2" V if {$WithoutReferences} { regsub {\^.*$} $V "" V } return $V } set X [expr [string last "X" $V] + 1] set PE [string range $V $X end] regsub -all {[^0-9]} $V " " VI set A "Salut" set B "Coucou" scan $VI "%d %d" A B if {$A!="Salut" && $B==$PE } { for {set I [expr [string length $A] - 1]} { $I < [string length $B]} { incr I } { set P [string range $B 0 $I] set Z [expr $X + $I] set R [expr (1.0*$P)/$A] if {[expr $Z>=[string length $V]-1]} { break } if {0.8 < $R && $R < 1.2} { set V "[string range $V 0 $Z]^[string range $V [incr Z] end]" if {$WithoutReferences} { regsub {\^.*$} $V "" V } return $V } } if {$A>$B} { regsub "X" $V "X^" V } if {$WithoutReferences} { regsub {\^.*$} $V "" V } return $V } if {[regexp {[A-Z][a-z]+([0-9]+)$} $V Match N]} { regsub "$N$" $V "^$N" V } if {$WithoutReferences} { regsub {\^.*$} $V "" V } return $V } proc LCA {{Qui ""} {Quoi ""}} { global LCA if {$Qui==""} { set Qui "ListOf" ; set Quoi "Tables" } if {$Quoi==""} { set Quoi "Values" } if {[info exists LCA($Qui,$Quoi)]} { return $LCA($Qui,$Quoi) } if {[info exists LCA("EstCharge")]} { return "" } set LCA("EstCharge") 1 foreach Ligne [LesLignesDuFichier "[HomeRipp]/GenoretBeaufort/Recu/DeLorentz/K2.csv"] { if { ! [regexp ";" $Ligne]} {continue} if {[regexp {^;;;Table} $Ligne]} { set Table $Ligne regsub -all ";" $Table "" Table regsub { +\:} $Table ":" Table if {[regexp {Table [0-9][A-Z] } $Table]} { regsub {Table [0-9][A-Z]} $Table "&:" Table } set TN [StringApres "Table " dans $Table] regsub "\:" $TN "" TN regsub -all " " $TN "_" TN lappend LCA(ListOf,Tables) $TN set Gene [StringApres ":" dans $Table] lappend LCA(ListOf,Genes) $Gene set LCA($TN,Gene) $Gene set LCA($TN,Families) $LCA(Current,Families) foreach Family $LCA(Current,Families) { set LCA($TN,$Family) $LCA(Current,$Family) foreach H $LesHeaders V $LCA(Current,$Family) { if {$H!="Family"} { regsub -all " " $V "" V } if {[regexp "Predicted_Change" $H]} { set V [GoodCodeForPredictedChange $V] } set LCA($Family,$H) $V } } set LCA(Current,Families) {} continue } if {[regexp "^Family" $Ligne]} { if {[info exists LesHeaders]} { continue } regsub -all " " $Ligne "_" Ligne set LesHeaders {} set Allele 1 foreach H [split $Ligne ";"] { if {$H=="Family"} { lappend LesHeaders $H ; continue } if {[info exists DejaVu(${H}_1)]} { set Allele 2 } append H "_$Allele" set DejaVu($H) 1 lappend LesHeaders $H } set LCA(ListOf,Headers) $LesHeaders continue } if {[regexp {^;} $Ligne]} { continue } set LesMots [split $Ligne ";"] set Family [lindex $LesMots 0] regsub -all " " $Family "_" Family lappend LCA(Current,Families) $Family set LCA(Current,$Family) $LesMots set LCA($Family,Values) $LesMots lappend LCA(ListOf,Families) $Family } return [LCA $Qui $Quoi] }